home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / newtwoa.s < prev    next >
Text File  |  1997-01-31  |  131KB  |  8,885 lines

  1.  
  2. maxscrdiv EQU 8
  3. max3ddiv EQU 5
  4. playerheight EQU 12*1024
  5. playercrouched EQU 6*1024
  6. scrheight EQU 80
  7.  
  8. ; k/j/m
  9. ; 4/8
  10.  
  11.  
  12.  
  13. ; s/x
  14. ; b/n
  15.  
  16. xpos EQU 0    ;l
  17. zpos EQU 4    ;l
  18. zsinval EQU 8    ;w
  19. zcosval EQU 10    ;w
  20. ztox EQU 12    ;l
  21. xsinval EQU 16    ;w
  22. xcosval EQU 18    ;w
  23. xspd EQU 20    ;w
  24.  
  25. zspd EQU 22    ;wd
  26. mapx EQU 24    ;b
  27. mapz EQU 25    ;b
  28. whichtile EQU 26 ;b
  29. xofflight EQU 28    ;w
  30. zofflight EQU 30    ;w
  31. offlight EQU 32        ;w
  32. zlinestore EQU 34
  33. zlinedir EQU 38
  34. zposdir EQU 40
  35. zposstore EQU 42
  36. xdiststore EQU 44
  37. xdistdir EQU 46
  38. zwallfound EQU 48
  39.  
  40. xlinestore EQU 50
  41. xlinedir EQU 54
  42. xposdir EQU 56
  43. xposstore EQU 58
  44. zdiststore EQU 60
  45. zdistdir EQU 62
  46. xwallfound EQU 64
  47.  
  48.  
  49. midoffset EQU 104*4*40
  50.  
  51.  SECTION Scrn,CODE
  52. OpenLib         equ -552
  53. CloseLib        equ -414
  54.  
  55. INTREQ    equ    $09C
  56. INTENA    equ    $09A
  57. INTENAR    equ    $01C
  58. DMACON    equ    $096
  59.  
  60. SERPER    equ    $032
  61. SERDATR    equ    $018
  62. SERDAT    equ    $030
  63. vhposr        equ $006    
  64. vhposrl        equ $007 
  65.  
  66. bltcon0        equ $40 
  67. bltcon1        equ $42
  68. bltcpt        equ $48
  69. bltbpt        equ $4c
  70. bltapt        equ $50
  71. spr0ctl        equ $142
  72. spr1ctl        equ $14a
  73. spr2ctl        equ $152
  74. spr3ctl        equ $15a
  75. spr4ctl        equ $162
  76. spr5ctl        equ $16a
  77. spr6ctl        equ $172
  78. spr7ctl        equ $17a
  79. spr0pos        equ $140
  80. spr1pos        equ $148
  81. spr2pos        equ $150
  82. spr3pos        equ $158
  83. spr4pos        equ $160
  84. spr5pos        equ $168
  85. spr6pos        equ $170
  86. spr7pos        equ $178
  87. bltdpt         equ $54
  88. bltafwm        equ $44
  89. bltalwm        equ $46
  90. bltsize         equ $58
  91. bltcmod         equ $60
  92. bltbmod         equ $62
  93. bltamod         equ $64
  94. bltdmod         equ $66
  95. diwstart        equ $8e         ; Screen hardware registers.
  96. diwstop         equ $90
  97. ddfstart        equ $92
  98. ddfstop         equ $94
  99. bplcon0         equ $100
  100. bplcon1         equ $102
  101. col0            equ $180
  102. col1            equ $182
  103. col2        equ $184
  104. col3        equ $186
  105. col4        equ $188
  106. col5        equ $18a
  107. col6        equ $18c
  108. col7        equ $18e
  109. col8            equ $190
  110. col9            equ $192
  111. col10           equ $194
  112. col11           equ $196
  113. col12           equ $198
  114. col13           equ $19a
  115. dmacon        equ $96
  116. dmaconr        equ $002
  117. intenar        equ $01c
  118. intena        equ $09a
  119. intreq        equ $09c
  120. intreqr        equ $01e
  121. intreqrl    equ $01f
  122. bpl1pth         equ $e0
  123. bpl1ptl         equ $e2
  124. bpl2pth        equ $e4
  125. bpl2ptl        equ $e6
  126. bpl3pth        equ $e8
  127. bpl3ptl        equ $ea
  128. bpl4pth        equ $ec
  129. bpl4ptl        equ $ee
  130. bpl5pth        equ $f0
  131. bpl5ptl        equ $f2
  132. bpl6pth        equ $f4
  133. bpl6ptl        equ $f6
  134. bpl7pth        equ $f8
  135. bpl7ptl        equ $fa
  136. bpl8pth        equ $fc
  137. bpl8ptl        equ $fe
  138. spr0pth        equ $120
  139. spr0ptl        equ $122
  140. spr1pth        equ $124
  141. spr1ptl        equ $126
  142. spr2pth        equ $128
  143. spr2ptl        equ $12a
  144. spr3pth        equ $12c
  145. spr3ptl        equ $12e
  146. spr4pth        equ $130
  147. spr4ptl        equ $132
  148. spr5pth        equ $134
  149. spr5ptl        equ $136
  150. spr6pth        equ $138
  151. spr6ptl        equ $13a
  152. spr7pth        equ $13c
  153. spr7ptl        equ $13e
  154.  
  155. ; move.l #length,d0
  156. ; moveq.l #2,d1    ; chipmem
  157. ; move.l 4.w,a6
  158. ; jsr allocmem(a6) = -198
  159.  
  160. ; tst.l d0
  161. ; beq.s ohbugger
  162. ; move.l d0,memaddr
  163.  
  164.  
  165. ; move.l 4.w,a6
  166. ; move.l memaddr,a1
  167. ; move.l #size,d0
  168. ; jsr freemem(a6) =-210
  169.  
  170.  
  171. ** This waits for the blitter to finish before allowing program
  172. ** execution to continue.
  173.  
  174. SAVEREGS MACRO
  175.  movem.l d0-d7/a0-a6,-(a7)
  176.  ENDM
  177.  
  178. GETREGS MACRO
  179.  movem.l (a7)+,d0-d7/a0-a6
  180.  ENDM
  181.  
  182.  
  183. WB MACRO
  184. \@bf:
  185.  btst #6,dmaconr(a6)
  186.  bne.s \@bf
  187.  ENDM
  188.  
  189. *Another version for when a6 <> dff000
  190.  
  191. WBSLOW MACRO
  192. \@bf:
  193.  btst #6,$dff000+dmaconr
  194.  bne.s \@bf
  195.  ENDM
  196.  
  197. WT MACRO
  198. \@bf:
  199.  btst #6,(a3)
  200.  bne.s \@bd
  201.  rts
  202. \@bd: 
  203.  btst #4,(a0)
  204.  beq.s \@bf
  205.  ENDM
  206.  
  207. WTNOT MACRO
  208. \@bf:
  209.  btst #6,(a3)
  210.  bne.s \@bd
  211.  rts
  212. \@bd: 
  213.  btst #4,(a0)
  214.  bne.s \@bf
  215.  ENDM
  216.  
  217. **
  218.  
  219.  include "macros.i"
  220.  include "ab3:source/defs.i"
  221.  
  222.  move.w (a0)+,mors
  223.  
  224.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  225.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  226.  
  227.  jsr START
  228.  
  229.  rts
  230.  
  231. * Load level into buffers.
  232.  clr.b doanything
  233.  
  234. PLAYTHEGAME:
  235.  
  236.  jsr INITCOPPERSCRN
  237.  
  238. ; Get level memory.
  239.  
  240.  move.l #1,d1    
  241.  move.l #100000,d0
  242.  move.l 4.w,a6
  243.  jsr -198(a6)
  244.  move.l d0,LEVELDATA
  245.  
  246.  move.l #1,d1
  247.  move.l #50000,d0
  248.  move.l 4.w,a6
  249.  jsr -198(a6)
  250.  move.l d0,LEVELGRAPHICS
  251.  
  252.  move.l #1,d1
  253.  move.l #50000,d0
  254.  move.l 4.w,a6
  255.  jsr -198(a6)
  256.  move.l d0,LEVELCLIPS
  257.  
  258. ; move.l #LEVELDATAD,LEVELDATA
  259. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  260. ; move.l #LEVELCLIPSD,LEVELCLIPS
  261.  
  262.  
  263. ; bra noload
  264.  
  265.  move.l doslib,a6
  266.  move.l #LDname,d1
  267.  move.l #1005,d2
  268.  jsr -30(a6)
  269.  move.l d0,LDhandle
  270.  
  271.  move.l doslib,a6
  272.  move.l d0,d1
  273.  move.l LEVELDATA,d2
  274.  move.l #100000,d3
  275.  jsr -42(a6)
  276.  
  277.  move.l doslib,a6
  278.  move.l LDhandle,d1
  279.  jsr -36(a6)
  280.  
  281. ********
  282.  
  283.  move.l doslib,a6
  284.  move.l #LGname,d1
  285.  move.l #1005,d2
  286.  jsr -30(a6)
  287.  move.l d0,LGhandle
  288.  
  289.  move.l doslib,a6
  290.  move.l d0,d1
  291.  move.l LEVELGRAPHICS,d2
  292.  move.l #50000,d3
  293.  jsr -42(a6)
  294.  
  295.  move.l doslib,a6
  296.  move.l LGhandle,d1
  297.  jsr -36(a6)
  298.  
  299. ********
  300.  
  301.  move.l doslib,a6
  302.  move.l #LCname,d1
  303.  move.l #1005,d2
  304.  jsr -30(a6)
  305.  move.l d0,LChandle
  306.  
  307.  move.l doslib,a6
  308.  move.l d0,d1
  309.  move.l LEVELCLIPS,d2
  310.  move.l #50000,d3
  311.  jsr -42(a6)
  312.  
  313.  move.l doslib,a6
  314.  move.l LChandle,d1
  315.  jsr -36(a6)
  316.  
  317. *******
  318.  
  319. noload:
  320.  
  321. ********
  322.  
  323.  jsr LOADWALLS
  324.  jsr LOAD_SFX
  325.  jsr LOADFLOOR
  326.  jsr LOADOBS
  327.  
  328. ; move.l doslib,a6
  329. ; move.l #Prefsname,d1
  330. ; move.l #1005,d2
  331. ; jsr -30(a6)
  332. ; move.l d0,Prefshandle
  333.  
  334. ; move.l doslib,a6
  335. ; move.l d0,d1
  336. ; move.l #Prefsfile,d2
  337. ; move.l #50,d3
  338. ; jsr -42(a6)
  339.  
  340. ; move.l doslib,a6
  341. ; move.l Prefshandle,d1
  342. ; jsr -36(a6)
  343.  
  344. *******
  345.  
  346.  cmp.b #'s',Prefsfile+2
  347.  seq STEREO
  348.  
  349.  move.l doslib,d0
  350.  move.l d0,a1
  351.  move.l 4.w,a6
  352.  jsr CloseLib(a6)
  353.  
  354.  move.l #$dff000,a6
  355.  move.w #$87c0,dmacon(a6)
  356.  move.w #$8020,dmacon(a6)
  357.  move.w intenar(a6),saveinters
  358.  move.w #$7fff,intena(a6)
  359.  move.w #$00ff,$dff09e
  360.  
  361. *** Put myself in supervisor mode
  362.  
  363.  move.l #blag,$80
  364.  trap #0
  365. ; move.l $6c,d0
  366. ; move.l #blag,$6c
  367. ; move.w #$8010,intreq(a6)
  368.  
  369.  rts
  370.  
  371. saveit: ds.l 10
  372. doslibname: dc.b 'dos.library',0
  373.  even
  374. doslib: dc.l 0
  375.  
  376. mors: dc.w 0
  377.  
  378. LDname: dc.b 'ab3:includes/twolev.bin',0
  379.  even
  380. LDhandle: dc.l 0
  381. LGname: dc.b 'ab3:includes/twolev.graph.bin',0
  382.  even
  383. LGhandle: dc.l 0
  384. LCname: dc.b 'ab3:includes/twolev.clips',0
  385.  even
  386. LChandle: dc.l 0
  387.  
  388. Prefsname: dc.b 'ram:prefs',0
  389.  even
  390. Prefshandle: dc.l 0
  391.  
  392. Prefsfile:
  393.  dc.b 'k4nx'
  394.  ds.b 50
  395.  
  396.  even
  397.  
  398. blag:
  399. ; move.w #$10,intreq(a6)
  400. ; move.l d0,$6c
  401. ; move.w #$7fff,intena(a6)
  402.  
  403.  move.w #$20,$dff1dc
  404.  
  405.  move.l $6c,saveit
  406.  move.l #Chan0inter,$6c
  407.  
  408. ****************************
  409. * Initialize level
  410. ****************************
  411. * Poke all clip offsets into
  412. * correct bit of level data.
  413. ****************************
  414.  move.l LEVELGRAPHICS,a0
  415.  move.l 12(a0),a1
  416.  add.l a0,a1
  417.  move.l a1,ZoneGraphAdds
  418.  move.l (a0),a1
  419.  add.l a0,a1
  420.  move.l a1,DoorData
  421.  move.l 4(a0),a1
  422.  add.l a0,a1
  423.  move.l a1,LiftData
  424.  move.l 8(a0),a1
  425.  add.l a0,a1
  426.  move.l a1,SwitchData
  427.  adda.w #16,a0
  428.  move.l a0,ZoneAdds
  429.  
  430.  move.l LEVELDATA,a1
  431.  move.l 16+6(a1),a2
  432.  add.l a1,a2
  433.  move.l a2,Points
  434.  move.w 8+6(a1),d0
  435.  lea 4(a2,d0.w*4),a2
  436.  move.l a2,PointBrights
  437.  
  438.  move.l 20+6(a1),a2
  439.  add.l a1,a2
  440.  move.l a2,FloorLines
  441.  move.l 24+6(a1),a2
  442.  add.l a1,a2
  443.  move.l a2,ObjectData
  444.  move.l 28+6(a1),a2
  445.  add.l a1,a2
  446.  move.l a2,PlayerShotData
  447.  move.l 32+6(a1),a2
  448.  add.l a1,a2
  449.  move.l a2,NastyShotData
  450.  move.l 36+6(a1),a2
  451.  add.l a1,a2
  452.  move.l a2,ObjectPoints  
  453.  move.l 40+6(a1),a2
  454.  add.l a1,a2
  455.  move.l a2,PLR1_Obj
  456.  move.l 44+6(a1),a2
  457.  add.l a1,a2
  458.  move.l a2,PLR2_Obj
  459.  move.w 14+6(a1),NumObjectPoints
  460.  
  461. ; bra noclips
  462.   
  463.  move.l LEVELCLIPS,a2
  464.  moveq #0,d0
  465.  move.w 10+6(a1),d7    ;numzones
  466. assignclips:
  467.  move.l (a0)+,a3
  468.  add.l a1,a3    ; pointer to a zone
  469.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  470. dowholezone:
  471.  tst.w (a3)
  472.  blt.s nomorethiszone
  473.  tst.w 2(a3)
  474.  blt.s thisonenull
  475.  
  476.  move.l d0,d1
  477.  asr.l #1,d1
  478.  move.w d1,2(a3)
  479.  
  480. findnextclip:
  481.  cmp.w #-2,(a2,d0.l)
  482.  beq.s foundnextclip
  483.  addq.l #2,d0
  484.  bra.s findnextclip
  485. foundnextclip
  486.  addq.l #2,d0
  487.  
  488. thisonenull:
  489.  addq #8,a3 
  490.  bra.s dowholezone
  491. nomorethiszone:
  492.  dbra d7,assignclips
  493.  
  494.  lea (a2,d0.l),a2
  495.  move.l a2,CONNECT_TABLE
  496.  
  497. noclips:
  498.  
  499. * Put in addresses of glowything
  500.  
  501.  
  502. ************************************
  503.  
  504. ; cmp.b #'k',Prefsfile
  505. ; bne.s nkb
  506.  st PLR1KEYS
  507.  clr.b PLR1PATH
  508.  clr.b PLR1MOUSE
  509.  clr.b PLR1JOY
  510.  st PLR2KEYS
  511.  clr.b PLR2PATH
  512.  clr.b PLR2MOUSE
  513.  clr.b PLR2JOY
  514.  
  515. ;nkb:
  516. ; cmp.b #'m',Prefsfile
  517. ; bne.s nmc
  518. ; clr.b PLR1KEYS
  519. ; clr.b PLR1PATH
  520. ; st PLR1MOUSE
  521. ; clr.b PLR1JOY
  522. ;nmc:
  523. ; cmp.b #'j',Prefsfile
  524. ; bne.s njc
  525. ; clr.b PLR1KEYS
  526. ; clr.b PLR1PATH
  527. ; clr.b PLR1MOUSE
  528. ; st PLR1JOY
  529. ;njc:
  530.  
  531.  clr.b PLR1_StoodInTop
  532.  move.l #playerheight,PLR1s_height
  533.  
  534.  move.l #empty,pos1LEFT
  535.  move.l #empty,pos2LEFT
  536.  move.l #empty,pos1RIGHT
  537.  move.l #empty,pos2RIGHT
  538.  move.l #emptyend,Samp0endLEFT
  539.  move.l #emptyend,Samp1endLEFT
  540.  move.l #emptyend,Samp0endRIGHT
  541.  move.l #emptyend,Samp1endRIGHT
  542.  
  543.  move.l #nullspr,d0
  544.  move.w d0,s4l
  545.  move.w d0,s5l
  546.  move.w d0,s6l
  547.  move.w d0,s7l
  548.  swap d0
  549.  move.w d0,s4h
  550.  move.w d0,s5h
  551.  move.w d0,s6h
  552.  move.w d0,s7h 
  553.  
  554.  move.l #nullline,d0
  555.  move.w d0,n1l
  556.  swap d0
  557.  move.w d0,n1h
  558.  
  559.  move.l #Panel,d0
  560.  move.w d0,p1l
  561.  swap d0
  562.  move.w d0,p1h
  563.  move.l #Panel+40,d0
  564.  move.w d0,p2l
  565.  swap d0
  566.  move.w d0,p2h
  567.  move.l #Panel+40*2,d0
  568.  move.w d0,p3l
  569.  swap d0
  570.  move.w d0,p3h
  571.  move.l #Panel+40*3,d0
  572.  move.w d0,p4l
  573.  swap d0
  574.  move.w d0,p4h
  575.  move.l #Panel+40*4,d0
  576.  move.w d0,p5l
  577.  swap d0
  578.  move.w d0,p5h
  579.  move.l #Panel+40*5,d0
  580.  move.w d0,p6l
  581.  swap d0
  582.  move.w d0,p6h
  583.  move.l #Panel+40*6,d0
  584.  move.w d0,p7l
  585.  swap d0
  586.  move.w d0,p7h
  587.  move.l #Panel+40*7,d0
  588.  move.w d0,p8l
  589.  swap d0
  590.  move.w d0,p8h
  591.  
  592. *******************************
  593. * TIMER SCREEN SETUP
  594. ; move.l #TimerScr,d0
  595. ; move.w d0,p1l
  596. ; swap d0
  597. ; move.w d0,p1h
  598. ; move.w #$1201,Panelcon
  599.  
  600.  move.l #borders,d0
  601.  move.w d0,s0l
  602.  swap d0
  603.  move.w d0,s0h
  604.  move.l #borders+2592,d0
  605.  move.w d0,s1l
  606.  swap d0
  607.  move.w d0,s1h
  608.  move.l #borders+2592*2,d0
  609.  move.w d0,s2l
  610.  swap d0
  611.  move.w d0,s2h
  612.  move.l #borders+2592*3,d0
  613.  move.w d0,s3l
  614.  swap d0
  615.  move.w d0,s3h
  616.  
  617.  move.w #52*256+64,borders
  618.  move.w #212*256+0,borders+8
  619.  move.w #52*256+64,borders+2592
  620.  move.w #212*256+128,borders+8+2592
  621.  move.w #52*256+192,borders+2592*2
  622.  move.w #212*256+0,borders+8+2592*2
  623.  move.w #52*256+192,borders+2592*3
  624.  move.w #212*256+128,borders+8+2592*3
  625.  
  626.  move.l #FacePlace,d0
  627.  move.w d0,f1l
  628.  swap d0
  629.  move.w d0,f1h
  630.  move.l #FacePlace+32*24,d0
  631.  move.w d0,f2l
  632.  swap d0
  633.  move.w d0,f2h
  634.  move.l #FacePlace+32*24*2,d0
  635.  move.w d0,f3l
  636.  swap d0
  637.  move.w d0,f3h
  638.  move.l #FacePlace+32*24*3,d0
  639.  move.w d0,f4l
  640.  swap d0
  641.  move.w d0,f4h
  642.  move.l #FacePlace+32*24*4,d0
  643.  move.w d0,f5l
  644.  swap d0
  645.  move.w d0,f5h
  646.   
  647.  
  648.  move.l #bigfield,d0
  649.  move.w d0,ocl
  650.  swap d0
  651.  move.w d0,och
  652.  
  653.  bset.b #1,$bfe001
  654.  
  655. ; jmp stuff
  656. ;endstuff:
  657.  
  658.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  659.  move.w #$00ff,$dff09e
  660.  
  661. ; move.l #Blurbfield,$dff080
  662.  
  663.  move.w #0,d0
  664.  
  665.  move.l #scrn,d0
  666.  move.w d0,pl1l
  667.  swap d0
  668.  move.w d0,pl1h
  669.  
  670.  move.l #scrn+40,d0
  671.  move.w d0,pl2l
  672.  swap d0
  673.  move.w d0,pl2h
  674.  
  675.  move.l #scrn+80,d0
  676.  move.w d0,pl3l
  677.  swap d0
  678.  move.w d0,pl3h
  679.  
  680.  move.l #scrn+120,d0
  681.  move.w d0,pl4l
  682.  swap d0
  683.  move.w d0,pl4h
  684.  
  685.  move.l #scrn+160,d0
  686.  move.w d0,pl5l
  687.  swap d0
  688.  move.w d0,pl5h
  689.  
  690.  move.l #scrn+200,d0
  691.  move.w d0,pl6l
  692.  swap d0
  693.  move.w d0,pl6h
  694.  
  695.  move.l #scrn+240,d0
  696.  move.w d0,pl7l
  697.  swap d0
  698.  move.w d0,pl7h
  699.  
  700.  
  701. ****************************
  702.  jsr INITPLAYER
  703. ; bsr initobjpos
  704. ****************************
  705.  
  706.  
  707.  move.l #$dff000,a6
  708.  
  709.  move.l #null,$dff0a0
  710.  move.w #100,$dff0a4
  711.  move.w #443,$dff0a6
  712.  move.w #63,$dff0a8
  713.  
  714.  move.l #null2,$dff0b0
  715.  move.w #100,$dff0b4
  716.  move.w #443,$dff0b6
  717.  move.w #63,$dff0b8
  718.  
  719.  move.l #null4,$dff0c0
  720.  move.w #100,$dff0c4
  721.  move.w #443,$dff0c6
  722.  move.w #63,$dff0c8
  723.  
  724.  move.l #null3,$dff0d0
  725.  move.w #100,$dff0d4
  726.  move.w #443,$dff0d6
  727.  move.w #63,$dff0d8
  728.  
  729.  move.l #tab,a1
  730.  move.w #64,d7
  731.  move.w #0,d6
  732. outerlop
  733.  move.l #pretab,a0
  734.  move.w #255,d5
  735. scaledownlop:
  736.  move.b (a0)+,d0
  737.  ext.w d0
  738.  ext.l d0
  739.  muls d6,d0
  740.  asr.l #6,d0
  741.  move.b d0,(a1)+
  742.  dbra d5,scaledownlop
  743.  addq #1,d6
  744.  dbra d7,outerlop
  745.  
  746.  move.l #$dff000,a6
  747.  
  748.  move.w #$c018,intena(a6)
  749.  
  750.  move.w #$f,dmacon(a6)
  751.  move.w #$820f,dmacon(a6)
  752.  
  753. ; bsr protinit
  754.  
  755.  bsr FullEnergy
  756.  move.w #63,OldAmmo
  757.  move.w #0,Ammo
  758.  bsr AmmoBar
  759.  move.w #0,OldAmmo
  760.  
  761.  move.w #127,PLR1_energy
  762.  move.w #127,PLR2_energy
  763.  move.b #1,PLR1_GunDamage
  764.  move.b #1,PLR2_GunDamage
  765.  move.w #3,PLR1_GunNoise
  766.  move.w #3,PLR2_GunNoise
  767.  
  768.  move.w #80,PLR1_GunData    ; 10 shots pistol
  769.  st PLR1_GunData+7
  770.  clr.b PLR1_GunData+32+7
  771.  clr.w PLR1_GunData+32
  772.  move.b #0,PLR1_GunSelected
  773.  
  774.  move.w #80,PLR2_GunData    ; 10 shots pistol
  775.  st PLR2_GunData+7
  776.  clr.b PLR2_GunData+32+7
  777.  clr.w PLR2_GunData+32
  778.  move.b #0,PLR2_GunSelected
  779.  
  780. ; move.w #$20,$1dc(a6)
  781.  
  782.  move.w #$0,$dff034
  783.  move.w #0,Conditions
  784.  move.l #KeyMap,a5
  785.  clr.b $45(a5)
  786.  
  787.  move.l #ingame,mt_data
  788.  clr.b UseAllChannels
  789.  
  790. ; cmp.b #'b',Prefsfile+3
  791. ; bne.s .noback
  792. ; jsr mt_init
  793. ;.noback:
  794. ;
  795. ; clr.b CHANNELDATA
  796. ; clr.b CHANNELDATA+8
  797. ; clr.b CHANNELDATA+16
  798. ; clr.b CHANNELDATA+24
  799. ;
  800. ; cmp.b #'b',Prefsfile+3
  801. ; bne.s noreserve
  802. ;
  803. ; st CHANNELDATA
  804. ; st CHANNELDATA+8
  805. ; st CHANNELDATA+16
  806. ; st CHANNELDATA+24
  807. ;noreserve: 
  808.  
  809. ; st CHANNELDATA
  810. ; st CHANNELDATA+8
  811.  
  812.  move.l SampleList+6*8,pos0LEFT
  813.  move.l SampleList+6*8+4,Samp0endLEFT
  814.  move.l #playerheight,PLR1s_targheight
  815.  move.l #playerheight,PLR1s_height
  816.  move.l #playerheight,PLR2s_targheight
  817.  move.l #playerheight,PLR2s_height
  818.  
  819. ; cmp.b #'n',mors
  820. ; beq.s nohandshake
  821. ;
  822. ; move.b #%11011000,$bfd200
  823. ; move.b #%00010000,$bfd000
  824. ;waitloop:
  825. ; btst.b #4,$bfd000
  826. ; bne.s waitloop
  827. ; move.b #%11000000,$bfd200
  828.  
  829. ;wtmouse:
  830. ; btst #6,$bfe001
  831. ; bne.s wtmouse
  832.  
  833. ;nohandshake:
  834.  st doanything
  835.  
  836.  
  837. ; jmp end
  838.  
  839.  move.l COPSCRN1,drawpt
  840.  move.l COPSCRN2,olddrawpt
  841.  
  842.  jsr KInt_Init
  843.  jsr MAKEBACKROUT
  844.  
  845. lop: 
  846.  
  847.  st READCONTROLS
  848.  move.l #$dff000,a6
  849.  
  850.  move.w hitcol,d0
  851.  beq.s nofadedownhc
  852.  sub.w #$100,d0
  853.  move.w d0,hitcol
  854.  move.w d0,hitcol2
  855. nofadedownhc:
  856.  
  857.  move.l drawpt,d0
  858.  move.l olddrawpt,drawpt
  859.  move.l d0,olddrawpt
  860.  move.l d0,$dff084
  861.  move.l drawpt,a3
  862.  adda.w #10,a3
  863.  move.l a3,frompt
  864.  add.l #104*4*40,a3
  865.  move.l a3,midpt
  866.  
  867.  cmp.b #'s',mors
  868.  beq.s nowaitslave
  869.  
  870. waitfortop:
  871.  btst.b #0,intreqrl(a6)
  872.  beq waitfortop
  873.  move.w #$1,intreq(a6)
  874.  move.l #PLR1_GunData,GunData
  875.  move.b PLR1_GunSelected,GunSelected
  876.  bra waitmaster
  877.  
  878. nowaitslave:
  879.  move.l #PLR2_GunData,GunData
  880.  move.b PLR2_GunSelected,GunSelected
  881. waitmaster:
  882.  
  883.  
  884.  move.l waterpt,a0
  885.  move.l (a0)+,watertouse
  886.  cmp.l #endwaterlist,a0
  887.  blt.s okwat
  888.  move.l #waterlist,a0
  889. okwat:
  890.  move.l a0,waterpt
  891.  
  892.  add.w #640,wtan
  893.  and.w #8191,wtan
  894.  add.w #1,wateroff
  895.  and.w #63,wateroff
  896.  
  897.  move.l GunData,a6
  898.  moveq #0,d0
  899.  move.b GunSelected,d0
  900.  lsl.w #2,d0
  901.  lea (a6,d0.w*8),a6
  902.  move.w (a6),d0
  903.  asr.w #3,d0
  904.  move.w d0,Ammo
  905.  
  906.  move.l #$dff000,a6
  907.  
  908.  cmp.b #'s',mors
  909.  beq ASlaveShouldWaitOnHisMaster
  910.  
  911.  cmp.b #'n',mors
  912.  bne NotOnePlayer
  913.  
  914.  move.w PLR1_energy,Energy
  915.  move.w FramesToDraw,TempFrames
  916.  move.w #0,FramesToDraw
  917.  
  918.  move.l PLR1s_xoff,p1_xoff
  919.  move.l PLR1s_zoff,p1_zoff
  920.  move.l PLR1s_yoff,p1_yoff
  921.  move.l PLR1s_height,p1_height
  922.  move.w PLR1s_angpos,p1_angpos
  923.  move.w PLR1_bobble,p1_bobble
  924.  move.b PLR1_clicked,p1_clicked
  925.  move.b PLR1_fire,p1_fire
  926.  clr.b PLR1_clicked
  927.  move.b PLR1_SPCTAP,p1_spctap
  928.  clr.b PLR1_SPCTAP
  929.  move.b PLR1_Ducked,p1_ducked
  930.  move.b PLR1_GunSelected,p1_gunselected
  931.  
  932.  bsr PLR1_Control
  933.  
  934.  move.l PLR1_Roompt,a0
  935.  move.l ToZoneRoof(a0),SplitHeight
  936.  move.w p1_xoff,THISPLRxoff
  937.  move.w p1_zoff,THISPLRzoff
  938.  
  939.  
  940.  move.l #$60000,p2_yoff
  941.  move.l PLR2_Obj,a0
  942.  move.w #-1,GraphicRoom(a0)
  943.  move.w #-1,12(a0)
  944.  move.b #0,17(a0)
  945.  move.l #BollocksRoom,PLR2_Roompt
  946.  
  947.  bra donetalking
  948.  
  949. NotOnePlayer:
  950.  
  951.  move.w PLR1_energy,Energy
  952.  
  953.  jsr SENDFIRST
  954.  
  955.  move.w FramesToDraw,TempFrames
  956.  move.w #0,FramesToDraw
  957.  
  958.  move.l PLR1s_xoff,p1_xoff
  959.  move.l PLR1s_zoff,p1_zoff
  960.  move.l PLR1s_yoff,p1_yoff
  961.  move.l PLR1s_height,p1_height
  962.  move.w PLR1s_angpos,p1_angpos
  963.  move.w PLR1_bobble,p1_bobble
  964.  move.b PLR1_clicked,p1_clicked
  965.  clr.b PLR1_clicked
  966.  move.b PLR1_fire,p1_fire
  967.  move.b PLR1_SPCTAP,p1_spctap
  968.  clr.b PLR1_SPCTAP
  969.  move.b PLR1_Ducked,p1_ducked
  970.  move.b PLR1_GunSelected,p1_gunselected
  971.  
  972.  move.l p1_xoff,d0
  973.  jsr SENDFIRST
  974.  move.l d0,p2_xoff
  975.  
  976.  move.l p1_zoff,d0
  977.  jsr SENDFIRST
  978.  move.l d0,p2_zoff 
  979.  
  980.  move.l p1_yoff,d0
  981.  jsr SENDFIRST
  982.  move.l d0,p2_yoff
  983.   
  984.  move.l p1_height,d0
  985.  jsr SENDFIRST
  986.  move.l d0,p2_height
  987.  
  988.  move.w p1_angpos,d0
  989.  swap d0
  990.  move.w p1_bobble,d0
  991.  jsr SENDFIRST
  992.  move.w d0,p2_bobble
  993.  swap d0
  994.  move.w d0,p2_angpos
  995.  
  996.  
  997.  move.w TempFrames,d0
  998.  swap d0
  999.  move.b p1_spctap,d0
  1000.  lsl.w #8,d0
  1001.  move.b p1_clicked,d0
  1002.  jsr SENDFIRST
  1003.  move.b d0,p2_clicked
  1004.  lsr.w #8,d0
  1005.  move.b d0,p2_spctap
  1006.  
  1007.  
  1008.  move.w Rand1,d0
  1009.  swap d0
  1010.  move.b p1_ducked,d0
  1011.  lsl.w #8,d0
  1012.  move.b p1_gunselected,d0
  1013.  jsr SENDFIRST
  1014.  move.b d0,p2_gunselected
  1015.  lsr.w #8,d0
  1016.  move.b d0,p2_ducked
  1017.  
  1018.  move.b p1_fire,d0
  1019.  jsr SENDFIRST
  1020.  move.b d0,p2_fire
  1021.  
  1022.  bsr PLR2_Control
  1023.  bsr PLR1_Control
  1024.  move.l PLR1_Roompt,a0
  1025.  move.l ToZoneRoof(a0),SplitHeight
  1026.  move.w p1_xoff,THISPLRxoff
  1027.  move.w p1_zoff,THISPLRzoff
  1028.  
  1029.  bra donetalking
  1030.  
  1031. ASlaveShouldWaitOnHisMaster:
  1032.  
  1033.  move.w PLR2_energy,Energy
  1034.  
  1035.  jsr RECFIRST
  1036.  
  1037.  move.l PLR2s_xoff,p2_xoff
  1038.  move.l PLR2s_zoff,p2_zoff
  1039.  move.l PLR2s_yoff,p2_yoff
  1040.  move.l PLR2s_height,p2_height
  1041.  move.w PLR2s_angpos,p2_angpos
  1042.  move.w PLR2_bobble,p2_bobble
  1043.  move.b PLR2_clicked,p2_clicked
  1044.  clr.b PLR2_clicked
  1045.  move.b PLR2_fire,p2_fire
  1046.  move.b PLR2_SPCTAP,p2_spctap
  1047.  clr.b PLR2_SPCTAP
  1048.  move.b PLR2_Ducked,p2_ducked
  1049.  move.b PLR2_GunSelected,p2_gunselected
  1050.  
  1051.  move.l p2_xoff,d0
  1052.  jsr RECFIRST
  1053.  move.l d0,p1_xoff
  1054.  
  1055.  move.l p2_zoff,d0
  1056.  jsr RECFIRST
  1057.  move.l d0,p1_zoff
  1058.  
  1059.  move.l p2_yoff,d0
  1060.  jsr RECFIRST
  1061.  move.l d0,p1_yoff
  1062.  
  1063.  move.l p2_height,d0
  1064.  jsr RECFIRST
  1065.  move.l d0,p1_height
  1066.  
  1067.  move.w p2_angpos,d0
  1068.  swap d0
  1069.  move.w p2_bobble,d0
  1070.  jsr RECFIRST
  1071.  move.w d0,p1_bobble
  1072.  swap d0
  1073.  move.w d0,p1_angpos
  1074.  
  1075.  
  1076.  move.b p2_spctap,d0
  1077.  lsl.w #8,d0
  1078.  move.b p2_clicked,d0
  1079.  jsr RECFIRST
  1080.  move.b d0,p1_clicked
  1081.  lsr.w #8,d0
  1082.  move.b d0,p1_spctap
  1083.  swap d0
  1084.  move.w d0,TempFrames
  1085.  
  1086.  
  1087.  move.b p2_ducked,d0
  1088.  lsl.w #8,d0
  1089.  move.b p2_gunselected,d0
  1090.  jsr RECFIRST
  1091.  move.b d0,p1_gunselected
  1092.  lsr.w #8,d0
  1093.  move.b d0,p1_ducked
  1094.  swap d0
  1095.  move.w d0,Rand1
  1096.  
  1097.  move.b p2_fire,d0
  1098.  jsr RECFIRST
  1099.  move.b d0,p1_fire
  1100.  
  1101.  
  1102.  bsr PLR1_Control
  1103.  bsr PLR2_Control
  1104.  move.w p2_xoff,THISPLRxoff
  1105.  move.w p2_zoff,THISPLRzoff
  1106.  move.l PLR2_Roompt,a0
  1107.  move.l ToZoneRoof(a0),SplitHeight
  1108.  
  1109. donetalking:
  1110.  
  1111.  move.l #ZoneBrightTable,a1
  1112.  move.l ZoneAdds,a2
  1113.  move.l PLR2_ListOfGraphRooms,a0
  1114.  move.l PLR2_PointsToRotatePtr,a5
  1115.  cmp.b #'s',mors
  1116.  beq.s doallz
  1117.  move.l PLR1_ListOfGraphRooms,a0
  1118.  move.l PLR1_PointsToRotatePtr,a5
  1119.  
  1120. doallz
  1121.  move.w (a0),d0
  1122.  blt.s doneallz
  1123.  add.w #8,a0
  1124.  
  1125.  move.l (a2,d0.w*4),a3
  1126.  add.l LEVELDATA,a3
  1127.  move.w ToZoneBrightness(a3),d2
  1128.  
  1129.  blt.s justbright
  1130.  move.w d2,d3
  1131.  lsr.w #8,d3
  1132.  tst.b d3
  1133.  beq.s justbright
  1134.  
  1135.  move.l #BrightAnimTable,a4
  1136.  move.w -2(a4,d3.w*2),d2
  1137.  
  1138. justbright:
  1139.  move.w d2,(a1,d0.w*4)
  1140.  
  1141.  move.w ToUpperBrightness(a3),d2
  1142.  
  1143.  blt.s justbright2
  1144.  move.w d2,d3
  1145.  lsr.w #8,d3
  1146.  tst.b d3
  1147.  beq.s justbright2
  1148.  
  1149.  move.l #BrightAnimTable,a4
  1150.  move.w -2(a4,d3.w*2),d2
  1151.  
  1152. justbright2:
  1153.  move.w d2,2(a1,d0.w*4)
  1154.  
  1155.  bra doallz
  1156.  
  1157. doneallz:
  1158.  
  1159.  move.l PointBrights,a2
  1160.  move.l #CurrentPointBrights,a3
  1161. justtheone:
  1162.  move.w (a5)+,d0
  1163.  blt.s whythehell
  1164.  move.w (a2,d0.w*4),d2
  1165.  
  1166.  tst.b d2
  1167.  blt.s .justbright
  1168.  move.w d2,d3
  1169.  lsr.w #8,d3
  1170.  tst.b d3
  1171.  beq.s .justbright
  1172.  
  1173.  move.w d3,d4
  1174.  and.w #$f,d3
  1175.  lsr.w #4,d4
  1176.  add.w #1,d4
  1177.  
  1178.  move.l #BrightAnimTable,a0
  1179.  move.w -2(a0,d3.w*2),d3
  1180.  ext.w d2
  1181.  sub.w d2,d3
  1182.  muls d4,d3
  1183.  asr.w #4,d3
  1184.  add.w d3,d2
  1185.  
  1186. .justbright:
  1187.  ext.w d2
  1188.  
  1189.  move.w d2,(a3,d0.w*4)
  1190.  
  1191.  
  1192.  move.w 2(a2,d0.w*4),d2
  1193.  
  1194.  tst.b d2
  1195.  blt.s .justbright2
  1196.  move.w d2,d3
  1197.  lsr.w #8,d3
  1198.  tst.b d3
  1199.  beq.s .justbright2
  1200.  
  1201.  move.w d3,d4
  1202.  and.w #$f,d3
  1203.  lsr.w #4,d4
  1204.  add.w #1,d4
  1205.  
  1206.  move.l #BrightAnimTable,a0
  1207.  move.w -2(a0,d3.w*2),d3
  1208.  ext.w d2
  1209.  sub.w d2,d3
  1210.  muls d4,d3
  1211.  asr.w #4,d3
  1212.  add.w d3,d2
  1213.  
  1214. .justbright2:
  1215.  ext.w d2
  1216.  
  1217.  move.w d2,2(a3,d0.w*4)
  1218.  
  1219.  bra.s justtheone
  1220.  
  1221. whythehell:
  1222.  
  1223.  cmp.b #'n',mors
  1224.  beq nosee
  1225.  
  1226.  move.l PLR1_Roompt,FromRoom
  1227.  move.l PLR2_Roompt,ToRoom
  1228.  move.w p1_xoff,Viewerx
  1229.  move.w p1_zoff,Viewerz
  1230.  move.l p1_yoff,d0
  1231.  asr.l #7,d0
  1232.  move.w d0,Viewery
  1233.  move.w p2_xoff,Targetx
  1234.  move.w p2_zoff,Targetz
  1235.  move.l p2_yoff,d0
  1236.  asr.l #7,d0
  1237.  move.w d0,Targety
  1238.  move.b PLR1_StoodInTop,ViewerTop
  1239.  move.b PLR2_StoodInTop,TargetTop
  1240.  jsr CanItBeSeen
  1241.  
  1242.  move.l PLR1_Obj,a0
  1243.  move.b CanSee,d0
  1244.  and.b #2,d0
  1245.  move.b d0,17(a0)
  1246.  move.l PLR2_Obj,a0
  1247.  move.b CanSee,d0
  1248.  and.b #1,d0
  1249.  move.b d0,17(a0)
  1250.  
  1251. nosee:
  1252.  
  1253.  move.l PLR1_Obj,a0
  1254.  move.b #5,16(a0)
  1255.  move.l PLR2_Obj,a0
  1256.  move.b #11,16(a0)
  1257.  
  1258.  move.w TempFrames,d0
  1259.  add.w d0,p1_holddown
  1260.  cmp.w #30,p1_holddown
  1261.  blt.s oklength
  1262.  move.w #30,p1_holddown
  1263. oklength:
  1264.  
  1265.  tst.b p1_fire
  1266.  bne.s okstillheld
  1267.  sub.w d0,p1_holddown
  1268.  bge.s okstillheld
  1269.  move.w #0,p1_holddown
  1270.  
  1271. okstillheld:
  1272.  
  1273.  move.w TempFrames,d0
  1274.  add.w d0,p2_holddown
  1275.  
  1276.  cmp.w #30,p2_holddown
  1277.  blt.s oklength2
  1278.  move.w #30,p2_holddown
  1279. oklength2:
  1280.  
  1281.  
  1282.  tst.b p2_fire
  1283.  bne.s okstillheld2
  1284.  sub.w d0,p2_holddown
  1285.  bge.s okstillheld2
  1286.  move.w #0,p2_holddown
  1287. okstillheld2:
  1288.  
  1289.  move.l #PLR1_GunData,a1
  1290.  move.w p1_holddown,d0
  1291.  move.w d0,10+32*3(a1)
  1292.  move.l #PLR2_GunData,a1
  1293.  move.w p2_holddown,d0
  1294.  move.w d0,10+32*3(a1)
  1295.  
  1296.  
  1297. ******************************************
  1298. ******************************************
  1299.  
  1300.  
  1301.  cmp.b #'s',mors
  1302.  beq.s ImPlayer2OhYesIAm
  1303.  bsr USEPLR1
  1304.  bra IWasPlayer1
  1305.  
  1306. ImPlayer2OhYesIAm:
  1307.  bsr USEPLR2
  1308. IWasPlayer1:
  1309.  
  1310.  
  1311.  cmp.b #'s',mors
  1312.  beq drawplayer2
  1313.  
  1314.  move.w #0,scaleval
  1315.  move.l PLR1_xoff,xoff
  1316.  move.l PLR1_yoff,yoff
  1317.  move.l PLR1_zoff,zoff
  1318.  move.w PLR1_angpos,angpos
  1319.  move.w PLR1_cosval,cosval
  1320.  move.w PLR1_sinval,sinval
  1321.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  1322.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  1323.  move.l PLR1_Roompt,Roompt
  1324.  
  1325.  bsr OrderZones
  1326.  jsr objmoveanim
  1327.  bsr EnergyBar
  1328.  bsr AmmoBar
  1329.  
  1330.  
  1331.  move.w #0,leftclip
  1332.  move.w #96,rightclip
  1333.  move.w #0,deftopclip
  1334.  move.w #79,defbotclip
  1335.  move.w #0,topclip
  1336.  move.w #79,botclip
  1337. ; sub.l #10*104*4,frompt
  1338. ; sub.l #10*104*4,midpt
  1339.  
  1340. * Subroom loop
  1341.  
  1342.  bsr DrawDisplay 
  1343.  
  1344.  
  1345.  
  1346.  bra nodrawp2
  1347.  
  1348. drawplayer2
  1349.  
  1350.  move.w #0,scaleval
  1351.  move.l PLR2_xoff,xoff
  1352.  move.l PLR2_yoff,yoff
  1353.  move.l PLR2_zoff,zoff
  1354.  move.w PLR2_angpos,angpos
  1355.  move.w PLR2_cosval,cosval
  1356.  move.w PLR2_sinval,sinval
  1357.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  1358.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  1359.  move.l PLR2_Roompt,Roompt
  1360.  
  1361.  bsr OrderZones
  1362.  jsr objmoveanim
  1363.  bsr EnergyBar
  1364.  bsr AmmoBar
  1365.  
  1366.  move.w #0,leftclip
  1367.  move.w #96,rightclip
  1368.  move.w #0,deftopclip
  1369.  move.w #79,defbotclip
  1370.  move.w #0,topclip
  1371.  move.w #79,botclip
  1372.  
  1373.  bsr DrawDisplay
  1374.  
  1375. nodrawp2:
  1376.  
  1377.  move.l PLR2_Roompt,a0
  1378.  move.l #WorkSpace,a1
  1379.  clr.l (a1)
  1380.  clr.l 4(a1)
  1381.  clr.l 8(a1)
  1382.  clr.l 12(a1)
  1383.  clr.l 16(a1)
  1384.  clr.l 20(a1)
  1385.  clr.l 24(a1)
  1386.  clr.l 28(a1)
  1387.  
  1388.  cmp.b #'n',mors
  1389.  beq.s plr1only
  1390.  
  1391.  lea ToListOfGraph(a0),a0
  1392. .doallrooms:
  1393.  move.w (a0),d0
  1394.  blt.s .allroomsdone
  1395.  addq #8,a0
  1396.  move.w d0,d1
  1397.  asr.w #3,d0
  1398.  bset d1,(a1,d0.w)
  1399.  bra .doallrooms
  1400. .allroomsdone:
  1401.  
  1402. plr1only:
  1403.  
  1404.  move.l PLR1_Roompt,a0
  1405.  lea ToListOfGraph(a0),a0
  1406. .doallrooms2:
  1407.  move.w (a0),d0
  1408.  blt.s .allroomsdone2
  1409.  addq #8,a0
  1410.  move.w d0,d1
  1411.  asr.w #3,d0
  1412.  bset d1,(a1,d0.w)
  1413.  bra .doallrooms2
  1414. .allroomsdone2:
  1415.  
  1416.  move.l ObjectData,a0
  1417.  sub.w #64,a0
  1418. .doallobs:
  1419.  add.w #64,a0
  1420.  move.w (a0),d0
  1421.  blt.s .allobsdone
  1422.  move.w 12(a0),d0
  1423.  blt.s .doallobs
  1424.  move.w d0,d1
  1425.  asr.w #3,d0
  1426.  btst d1,(a1,d0.w)
  1427.  beq.s .doallobs
  1428.  or.b #127,worry(a0)
  1429.  bra.s .doallobs
  1430. .allobsdone:
  1431.  
  1432.  
  1433.  
  1434. ; move.l #brightentab,a0
  1435. ; move.l frompt,a3
  1436. ; adda.w #(4*33)+(104*4*20),a3
  1437. ; move.w #20,d7
  1438. ; move.w #20,d6
  1439. ;horl:
  1440. ; move.w d6,d5
  1441. ; move.l a3,a1
  1442. ;vertl
  1443. ; move.w (a1),d0
  1444. ; move.w (a0,d0.w*2),(a1)
  1445. ; addq #4,a1
  1446. ; dbra d5,vertl
  1447. ; adda.w #104*4,a3
  1448. ; dbra d7,horl
  1449.  
  1450.  move.l #$dff000,a6
  1451.  
  1452. ; move.w #$300,col0(a6)
  1453.  
  1454.  move.l #KeyMap,a5
  1455.  tst.b $45(a5)
  1456.  beq.s noend
  1457.  bra endnomusic
  1458. noend:
  1459.  
  1460.  tst.w PLR1_energy
  1461.  ble end
  1462.  tst.w PLR2_energy
  1463.  ble end
  1464.  
  1465.  move.l SwitchData,a0
  1466.  tst.b 24+8(a0)
  1467.  bne end
  1468.   
  1469.  JSR STOPTIMER
  1470.  
  1471.  bra lop
  1472.  
  1473. ***************************************************************************
  1474. ***************************************************************************
  1475. ****************** End of Main Loop here ********************************** 
  1476. ***************************************************************************
  1477. ***************************************************************************
  1478.  
  1479. putinsmallscr:
  1480.  move.l #$1fe0000,statskip
  1481.  move.l #$1fe0000,statskip+4
  1482.  
  1483.  move.l #healthpal,a5
  1484.  move.l COPSCRN1,a0
  1485.  move.l COPSCRN2,a2
  1486.  move.w #scrheight-1,d0
  1487.  move.l #0,d6
  1488.  move.w #0,d3
  1489.  move.w #$2bdf,startwait
  1490.  move.w #$2d01,endwait
  1491. .fillcop
  1492.  move.w #$180,d1
  1493.  
  1494.  move.l a0,a1
  1495.  move.l a2,a3
  1496.  move.w #$10c,(a1)+
  1497.  move.w #$10c,(a3)+
  1498.  move.w d3,(a1)+
  1499.  move.w d3,(a3)+
  1500.  eor.w #$8000,d3
  1501.  
  1502.  move.w #$106,(a1)+
  1503.  move.w #$106,(a3)+
  1504.  move.w #$2c42,d5
  1505.  or.w d3,d5
  1506.  and.w #$fffe,d5
  1507.  move.w d5,(a1)+
  1508.  move.w d5,(a3)+
  1509.  bsr do32
  1510.  
  1511.  move.w #$106,(a1)+
  1512.  move.w #$106,(a3)+
  1513.  move.w #$4c42,d5
  1514.  or.w d3,d5
  1515.  and.w #$fffe,d5
  1516.  move.w d5,(a1)+
  1517.  move.w d5,(a3)+
  1518.  bsr do32
  1519.  
  1520.  move.w #$106,(a1)+
  1521.  move.w #$106,(a3)+
  1522.  move.w #$6c42,d5
  1523.  or.w d3,d5
  1524.  and.w #$fffe,d5
  1525.  move.w d5,(a1)+
  1526.  move.w d5,(a3)+
  1527.  bsr do32
  1528.  
  1529.  
  1530.  move.l #$1060c42,(a1)+
  1531.  move.l #$1060c42,(a3)+
  1532.  move.w #$19e,(a1)+
  1533.  move.w (a5),(a1)+
  1534.  move.w #$19e,(a3)+
  1535.  move.w (a5)+,(a3)+
  1536.  
  1537. **********************************
  1538.  
  1539.  adda.w #104*4,a0
  1540.  adda.w #104*4,a2
  1541.  dbra d0,.fillcop
  1542.  
  1543.  move.w #$48,fetchstart
  1544.  move.w #$88,fetchstop
  1545.  move.w #$2cb1,winstart
  1546.  move.w #$2c91,winstop
  1547.  move.w #-24,modulo
  1548.  move.w #-24,modulo+4
  1549.  
  1550.  move.l #nullspr,d0
  1551.  move.w d0,s4l
  1552.  move.w d0,s5l
  1553.  move.w d0,s6l
  1554.  move.w d0,s7l
  1555.  swap d0
  1556.  move.w d0,s4h
  1557.  move.w d0,s5h
  1558.  move.w d0,s6h
  1559.  move.w d0,s7h 
  1560.  
  1561.  move.l #borders,d0
  1562.  move.w d0,s0l
  1563.  swap d0
  1564.  move.w d0,s0h
  1565.  move.l #borders+2592,d0
  1566.  move.w d0,s1l
  1567.  swap d0
  1568.  move.w d0,s1h
  1569.  move.l #borders+2592*2,d0
  1570.  move.w d0,s2l
  1571.  swap d0
  1572.  move.w d0,s2h
  1573.  move.l #borders+2592*3,d0
  1574.  move.w d0,s3l
  1575.  swap d0
  1576.  move.w d0,s3h
  1577.  
  1578.  
  1579.  move.l #scrn+40,a0
  1580.  move.l #scrn+160,a1
  1581.  move.l #scrn+280,a2
  1582.  move.l #smallscrntab,a3
  1583.  move.w #191,d7    ; counter
  1584.  move.w #0,d1    ; xpos
  1585. .plotscrnloop:
  1586.  move.b (a3)+,d0
  1587.  move.w d1,d2
  1588.  asr.w #3,d2
  1589.  move.b d1,d3
  1590.  not.b d3
  1591.  bclr.b d3,-40(a0,d2.w)
  1592.  bclr.b d3,(a0,d2.w)
  1593.  bclr.b d3,40(a0,d2.w)
  1594.  bclr.b d3,-40(a1,d2.w)
  1595.  bclr.b d3,(a1,d2.w)
  1596.  bclr.b d3,40(a1,d2.w)
  1597.  bclr.b d3,-40(a2,d2.w)
  1598.  btst #0,d0
  1599.  beq.s .nobp1
  1600.  bset.b d3,-40(a0,d2.w)
  1601. .nobp1:
  1602.  btst #1,d0
  1603.  beq.s .nobp2
  1604.  bset.b d3,(a0,d2.w)
  1605. .nobp2:
  1606.  btst #2,d0
  1607.  beq.s .nobp3
  1608.  bset.b d3,40(a0,d2.w)
  1609. .nobp3:
  1610.  btst #3,d0
  1611.  beq.s .nobp4
  1612.  bset.b d3,-40(a1,d2.w)
  1613. .nobp4:
  1614.  btst #4,d0
  1615.  beq.s .nobp5
  1616.  bset.b d3,(a1,d2.w)
  1617. .nobp5:
  1618.  btst #5,d0
  1619.  beq.s .nobp6
  1620.  bset.b d3,40(a1,d2.w)
  1621. .nobp6:
  1622.  btst #6,d0
  1623.  beq.s .nobp7
  1624.  bset.b d3,-40(a2,d2.w)
  1625. .nobp7:
  1626.  
  1627.  addq #1,d1
  1628.  
  1629.  dbra d7,.plotscrnloop
  1630.  
  1631.  
  1632.  rts
  1633.  
  1634. putinlargescr:
  1635.  
  1636.  move.l #$1000000,statskip
  1637.  move.l #$fffffffe,statskip+4
  1638.  
  1639.  move.l #healthpal,a5
  1640.  move.l COPSCRN1,a0
  1641.  move.l COPSCRN2,a2
  1642.  move.w #scrheight-1,d0
  1643.  move.l #0,d6
  1644.  move.w #0,d3
  1645.  move.w #$29df,startwait
  1646.  move.w #$2b01,endwait
  1647. .fillcop
  1648.  move.w #$180,d1
  1649.  
  1650.  move.l a0,a1
  1651.  move.l a2,a3
  1652.  move.w #$10c,(a1)+
  1653.  move.w #$10c,(a3)+
  1654.  move.w d3,(a1)+
  1655.  move.w d3,(a3)+
  1656.  eor.w #$8000,d3
  1657.  
  1658.  move.w #$106,(a1)+
  1659.  move.w #$106,(a3)+
  1660.  move.w #$2c42,d5
  1661.  or.w d3,d5
  1662.  and.w #$fffe,d5
  1663.  move.w d5,(a1)+
  1664.  move.w d5,(a3)+
  1665.  bsr do32
  1666.  
  1667.  move.w #$106,(a1)+
  1668.  move.w #$106,(a3)+
  1669.  move.w #$4c42,d5
  1670.  or.w d3,d5
  1671.  and.w #$fffe,d5
  1672.  move.w d5,(a1)+
  1673.  move.w d5,(a3)+
  1674.  bsr do32
  1675.  
  1676.  move.w #$106,(a1)+
  1677.  move.w #$106,(a3)+
  1678.  move.w #$6c42,d5
  1679.  or.w d3,d5
  1680.  and.w #$fffe,d5
  1681.  move.w d5,(a1)+
  1682.  move.w d5,(a3)+
  1683.  bsr do32
  1684.  
  1685.  move.w startwait,(a1)+
  1686.  move.w #$fffe,(a1)+
  1687.  move.w endwait,(a1)+
  1688.  move.w #$ff00,(a1)+
  1689.  move.w startwait,(a3)+
  1690.  move.w #$fffe,(a3)+
  1691.  move.w endwait,(a3)+
  1692.  move.w #$ff00,(a3)+
  1693.  
  1694.  
  1695.  add.w #$300,startwait
  1696.  add.w #$300,endwait
  1697.  
  1698. ; move.l #$1060c42,(a1)+
  1699. ; move.l #$1060c42,(a3)+
  1700. ; move.w #$19e,(a1)+
  1701. ; move.w (a5),(a1)+
  1702. ; move.w #$19e,(a3)+
  1703. ; move.w (a5)+,(a3)+
  1704.  
  1705. **********************************
  1706.  
  1707.  adda.w #104*4,a0
  1708.  adda.w #104*4,a2
  1709.  dbra d0,.fillcop
  1710.  
  1711.  move.w #$38,fetchstart
  1712.  move.w #$b8,fetchstop
  1713.  move.w #$2c81,winstart
  1714.  move.w #$2cc1,winstop
  1715.  move.w #-40,modulo
  1716.  move.w #-40,modulo+4
  1717.  
  1718.  move.l #nullspr,d0
  1719.  move.w d0,s0l
  1720.  move.w d0,s1l
  1721.  move.w d0,s2l
  1722.  move.w d0,s3l
  1723.  move.w d0,s4l
  1724.  move.w d0,s5l
  1725.  move.w d0,s6l
  1726.  move.w d0,s7l
  1727.  swap d0
  1728.  move.w d0,s0h
  1729.  move.w d0,s1h
  1730.  move.w d0,s2h
  1731.  move.w d0,s3h
  1732.  move.w d0,s4h
  1733.  move.w d0,s5h
  1734.  move.w d0,s6h
  1735.  move.w d0,s7h 
  1736.  
  1737.  move.l #scrn+40,a0
  1738.  move.l #scrn+160,a1
  1739.  move.l #scrn+280,a2
  1740.  move.l #scrntab,a3
  1741.  move.w #319,d7    ; counter
  1742.  move.w #0,d1    ; xpos
  1743. .plotscrnloop:
  1744.  move.b (a3)+,d0
  1745.  move.w d1,d2
  1746.  asr.w #3,d2
  1747.  move.b d1,d3
  1748.  not.b d3
  1749.  bclr.b d3,-40(a0,d2.w)
  1750.  bclr.b d3,(a0,d2.w)
  1751.  bclr.b d3,40(a0,d2.w)
  1752.  bclr.b d3,-40(a1,d2.w)
  1753.  bclr.b d3,(a1,d2.w)
  1754.  bclr.b d3,40(a1,d2.w)
  1755.  bclr.b d3,-40(a2,d2.w)
  1756.  btst #0,d0
  1757.  beq.s .nobp1
  1758.  bset.b d3,-40(a0,d2.w)
  1759. .nobp1:
  1760.  btst #1,d0
  1761.  beq.s .nobp2
  1762.  bset.b d3,(a0,d2.w)
  1763. .nobp2:
  1764.  btst #2,d0
  1765.  beq.s .nobp3
  1766.  bset.b d3,40(a0,d2.w)
  1767. .nobp3:
  1768.  btst #3,d0
  1769.  beq.s .nobp4
  1770.  bset.b d3,-40(a1,d2.w)
  1771. .nobp4:
  1772.  btst #4,d0
  1773.  beq.s .nobp5
  1774.  bset.b d3,(a1,d2.w)
  1775. .nobp5:
  1776.  btst #5,d0
  1777.  beq.s .nobp6
  1778.  bset.b d3,40(a1,d2.w)
  1779. .nobp6:
  1780.  btst #6,d0
  1781.  beq.s .nobp7
  1782.  bset.b d3,-40(a2,d2.w)
  1783. .nobp7:
  1784.  
  1785.  addq #1,d1
  1786.  
  1787.  dbra d7,.plotscrnloop
  1788.  
  1789.  
  1790.  
  1791.  
  1792.  rts
  1793.  
  1794. READCONTROLS: dc.w 0
  1795.  
  1796. tstststst: dc.w 0
  1797.  
  1798. BollocksRoom:
  1799.  dc.w -1
  1800.  ds.l 50
  1801.  
  1802. USEPLR1:
  1803.  
  1804. ***********************************
  1805.  
  1806.  move.l PLR1_Obj,a0 
  1807.  move.l ObjectPoints,a1
  1808.  move.l #ObjRotated,a2
  1809.  move.w (a0),d0
  1810.  move.l PLR1_xoff,(a1,d0.w*8)
  1811.  move.l PLR1_zoff,4(a1,d0.w*8)
  1812.  move.l PLR1_Roompt,a1
  1813.  
  1814.  move.b damagetaken(a0),d2
  1815.  beq .notbeenshot
  1816.  move.w #$f00,hitcol
  1817.  move.w #$f00,hitcol2
  1818.  ext.w d2
  1819.  sub.w d2,PLR1_energy
  1820.  movem.l d0-d7/a0-a6,-(a7)
  1821.  move.b #$fb,IDNUM
  1822.  move.w #19,Samplenum
  1823.  clr.b notifplaying
  1824.  move.w #0,Noisex
  1825.  move.w #0,Noisez
  1826.  move.w #100,Noisevol
  1827.  jsr MakeSomeNoise
  1828.  
  1829.  movem.l (a7)+,d0-d7/a0-a6
  1830.  
  1831. .notbeenshot
  1832.  move.b #0,damagetaken(a0)
  1833.  move.b PLR1_energy+1,numlives(a0)
  1834.  
  1835.  move.b PLR1_StoodInTop,ObjInTop(a0)
  1836.  
  1837.  move.w (a1),12(a0)
  1838.  move.w (a1),d2
  1839.  move.l #ZoneBrightTable,a1
  1840.  move.l (a1,d2.w*4),d2
  1841.  tst.b PLR1_StoodInTop
  1842.  bne.s .okinbott
  1843.  swap d2
  1844. .okinbott:
  1845.  
  1846.  move.w d2,2(a0)
  1847.  
  1848.  move.l PLR1_yoff,d0
  1849.  move.l PLR1_height,d1
  1850.  asr.l #1,d1
  1851.  add.l d1,d0
  1852.  asr.l #7,d0
  1853.  move.w d0,4(a0)
  1854.  
  1855. ***********************************
  1856.  
  1857.  move.l PLR2_Obj,a0 
  1858.  
  1859.  move.w PLR2_angpos,d0
  1860.  and.w #8190,d0
  1861.  move.w d0,Facing(a0)
  1862.  
  1863.  jsr ViewpointToDraw
  1864.  asl.w #2,d0
  1865.  moveq #0,d1
  1866.  move.b p2_bobble,d1
  1867.  not.b d1
  1868.  lsr.b #3,d1
  1869.  and.b #$3,d1
  1870.  add.w d1,d0
  1871.  move.w d0,10(a0)
  1872.  
  1873.  move.w #10,8(a0)
  1874.  
  1875.  move.l ObjectPoints,a1
  1876.  move.l #ObjRotated,a2
  1877.  move.w (a0),d0
  1878.  move.l PLR2_xoff,(a1,d0.w*8)
  1879.  move.l PLR2_zoff,4(a1,d0.w*8)
  1880.  move.l PLR2_Roompt,a1
  1881.  
  1882.  move.b damagetaken(a0),d2
  1883.  beq .notbeenshot2
  1884.  ext.w d2
  1885.  sub.w d2,PLR2_energy
  1886. .notbeenshot2
  1887.  move.b #0,damagetaken(a0)
  1888.  move.b PLR2_energy+1,numlives(a0)
  1889.  
  1890.  move.b PLR2_StoodInTop,ObjInTop(a0)
  1891.  
  1892.  move.w (a1),12(a0)
  1893.  move.w (a1),d2
  1894.  move.l #ZoneBrightTable,a1
  1895.  move.l (a1,d2.w*4),d2
  1896.  tst.b PLR2_StoodInTop
  1897.  bne.s .okinbott2
  1898.  swap d2
  1899. .okinbott2:
  1900.  
  1901.  move.w d2,2(a0)
  1902.  
  1903.  move.l PLR2_yoff,d0
  1904.  move.l PLR2_height,d1
  1905.  asr.l #1,d1
  1906.  add.l d1,d0
  1907.  asr.l #7,d0
  1908.  move.w d0,4(a0)
  1909.  
  1910. **********************************
  1911.  
  1912.  move.l PLR1_Obj,a0
  1913.  move.w PLR1_sinval,d4
  1914.  muls #100,d4
  1915.  move.w PLR1_cosval,d5
  1916.  muls #100,d5
  1917.  
  1918.  move.b PLR1_GunSelected,d0
  1919.  asl.b #2,d0
  1920.  add.b PLR1_GunFrame,d0
  1921.  move.b d0,11+128(a0)
  1922.  
  1923.  tst.b PLR1_GunFrame
  1924.  beq.s .noless
  1925.  subq.b #1,PLR1_GunFrame
  1926. .noless: 
  1927.  
  1928.  move.b ObjInTop(a0),ObjInTop+128(a0)
  1929.  
  1930.  move.l ObjectPoints,a1
  1931.  move.w 128(a0),d0
  1932.  move.l PLR1_xoff,d1
  1933.  add.l d4,d1
  1934.  move.l d1,(a1,d0.w*8)
  1935.  move.l PLR1_zoff,d1
  1936.  add.l d5,d1
  1937.  move.l d1,4(a1,d0.w*8)
  1938.  move.w 4(a0),d0
  1939.  move.l PLR1_height,d1
  1940.  asr.l #8,d1
  1941.  sub.w d1,d0
  1942.  
  1943.  add.w #16,d0
  1944.  move.w d0,4+128(a0)
  1945.  move.w #$2010,6+128(a0)
  1946.  
  1947.  move.w 12(a0),12+128(a0)
  1948.  
  1949.  move.w 2(a0),2+128(a0)
  1950.  
  1951.  rts
  1952.  
  1953. ***************************************************
  1954. **************************************************
  1955.  
  1956. USEPLR2:
  1957.  
  1958. ***********************************
  1959.  
  1960.  move.l PLR2_Obj,a0 
  1961.  move.l ObjectPoints,a1
  1962.  move.l #ObjRotated,a2
  1963.  move.w (a0),d0
  1964.  move.l PLR2_xoff,(a1,d0.w*8)
  1965.  move.l PLR2_zoff,4(a1,d0.w*8)
  1966.  move.l PLR2_Roompt,a1
  1967.  
  1968.  move.b damagetaken(a0),d2
  1969.  beq .notbeenshot
  1970.  move.w #$f00,hitcol
  1971.  move.w #$f00,hitcol2
  1972.  ext.w d2
  1973.  sub.w d2,PLR2_energy
  1974.  movem.l d0-d7/a0-a6,-(a7)
  1975.  move.w #19,Samplenum
  1976.  clr.b notifplaying
  1977.  move.b #$fb,IDNUM
  1978.  move.w #0,Noisex
  1979.  move.w #0,Noisez
  1980.  move.w #100,Noisevol
  1981.  jsr MakeSomeNoise
  1982.  
  1983.  movem.l (a7)+,d0-d7/a0-a6
  1984.  
  1985. .notbeenshot
  1986.  move.b #0,damagetaken(a0)
  1987.  move.b PLR2_energy+1,numlives(a0)
  1988.  
  1989.  move.b PLR2_StoodInTop,ObjInTop(a0)
  1990.  
  1991.  move.w (a1),12(a0)
  1992.  move.w (a1),d2
  1993.  move.l #ZoneBrightTable,a1
  1994.  move.l (a1,d2.w*4),d2
  1995.  tst.b PLR1_StoodInTop
  1996.  bne.s .okinbott
  1997.  swap d2
  1998. .okinbott:
  1999.  
  2000.  move.w d2,2(a0)
  2001.  
  2002.  move.l PLR2_yoff,d0
  2003.  move.l PLR2_height,d1
  2004.  asr.l #1,d1
  2005.  add.l d1,d0
  2006.  asr.l #7,d0
  2007.  move.w d0,4(a0)
  2008.  
  2009. ***********************************
  2010.  
  2011.  move.l PLR1_Obj,a0 
  2012.  
  2013.  move.w PLR1_angpos,d0
  2014.  and.w #8190,d0
  2015.  move.w d0,Facing(a0)
  2016.  
  2017.  jsr ViewpointToDraw
  2018.  asl.w #2,d0
  2019.  moveq #0,d1
  2020.  move.b p1_bobble,d1
  2021.  not.b d1
  2022.  lsr.b #3,d1
  2023.  and.b #$3,d1
  2024.  add.w d1,d0
  2025.  move.w d0,10(a0)
  2026.  move.w #10,8(a0)
  2027.  
  2028.  
  2029.  move.l ObjectPoints,a1
  2030.  move.l #ObjRotated,a2
  2031.  move.w (a0),d0
  2032.  move.l PLR1_xoff,(a1,d0.w*8)
  2033.  move.l PLR1_zoff,4(a1,d0.w*8)
  2034.  move.l PLR1_Roompt,a1
  2035.  
  2036.  move.b damagetaken(a0),d2
  2037.  beq .notbeenshot2
  2038.  ext.w d2
  2039.  sub.w d2,PLR1_energy
  2040. .notbeenshot2
  2041.  move.b #0,damagetaken(a0)
  2042.  move.b PLR1_energy+1,numlives(a0)
  2043.  
  2044.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2045.  
  2046.  move.w (a1),12(a0)
  2047.  move.w (a1),d2
  2048.  move.l #ZoneBrightTable,a1
  2049.  move.l (a1,d2.w*4),d2
  2050.  tst.b PLR1_StoodInTop
  2051.  bne.s .okinbott2
  2052.  swap d2
  2053. .okinbott2:
  2054.  
  2055.  move.w d2,2(a0)
  2056.  
  2057.  move.l PLR1_yoff,d0
  2058.  move.l PLR1_height,d1
  2059.  asr.l #1,d1
  2060.  add.l d1,d0
  2061.  asr.l #7,d0
  2062.  move.w d0,4(a0)
  2063.  
  2064. **********************************
  2065.  
  2066.  move.l PLR2_Obj,a0
  2067.  move.w PLR2_sinval,d4
  2068.  muls #100,d4
  2069.  move.w PLR2_cosval,d5
  2070.  muls #100,d5
  2071.  
  2072.  move.b PLR2_GunSelected,d0
  2073.  asl.b #2,d0
  2074.  add.b PLR2_GunFrame,d0
  2075.  move.b d0,11+64(a0)
  2076.  
  2077.  tst.b PLR2_GunFrame
  2078.  beq.s .noless
  2079.  subq.b #1,PLR2_GunFrame
  2080. .noless: 
  2081.  move.b ObjInTop(a0),ObjInTop+64(a0)
  2082.  
  2083.  move.l ObjectPoints,a1
  2084.  move.w 64(a0),d0
  2085.  move.l PLR2_xoff,d1
  2086.  add.l d4,d1
  2087.  move.l d1,(a1,d0.w*8)
  2088.  move.l PLR2_zoff,d1
  2089.  add.l d5,d1
  2090.  move.l d1,4(a1,d0.w*8)
  2091.  move.w 4(a0),d0
  2092.  move.l PLR2_height,d1
  2093.  asr.l #8,d1
  2094.  sub.w d1,d0
  2095.  add.w #16,d0
  2096.  move.w d0,4+64(a0)
  2097.  move.w #$2010,6+64(a0)
  2098.  
  2099.  move.w 12(a0),12+64(a0)
  2100.  
  2101.  move.w 2(a0),2+64(a0)
  2102.  
  2103.  rts
  2104.  
  2105.  
  2106. GunSelected: dc.b 0
  2107.  even
  2108.  
  2109. GunData: dc.l 0
  2110.  
  2111. PLR1_GunData:
  2112. ; 0=Pistol 1=Big Gun
  2113. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2114.  
  2115. ; VISIBLE/INSTANT (0/FF)
  2116. ; damage,gotgun(b)
  2117. ; Delay (w), Lifetime of bullet (w)
  2118. ; Click or hold down (0,1)
  2119. ; BulSpd: (w)
  2120.  
  2121. ;0
  2122.  dc.w 0
  2123. ;2
  2124.  dc.b 8,3
  2125. ;4
  2126.  dc.b 20
  2127. ;5
  2128.  dc.b -1
  2129. ;6
  2130.  dc.b 1,$ff
  2131. ;8
  2132.  dc.w 5,-1,1,0
  2133.  dc.w 0,0
  2134.  
  2135.  ds.w 6
  2136.  
  2137.  dc.w 0
  2138.  dc.b 8,1
  2139.  dc.b 40
  2140.  dc.b 0
  2141.  dc.b 4,0
  2142.  dc.w 10,-1,0,5
  2143.  dc.w 0,0
  2144.  
  2145.  ds.w 6
  2146.  
  2147.  dc.w 0
  2148.  dc.b 8,9
  2149.  dc.b 5
  2150.  dc.b 0
  2151.  dc.b 10,0
  2152.  dc.w 50,-1,0,5
  2153.  dc.w 0,0
  2154.  
  2155.  ds.w 6
  2156.  
  2157.  dc.w 90*8
  2158.  dc.b 1,22
  2159.  dc.b 40
  2160.  dc.b 0
  2161.  dc.b 4,$0    
  2162.  dc.w 0,0,1,4
  2163.  dc.w 0,0
  2164.  
  2165.  ds.w 6
  2166.  
  2167.  dc.w 90*8
  2168.  dc.b 1,9
  2169.  dc.b 10
  2170.  dc.b 0
  2171.  dc.b 2,$FF
  2172.  dc.w 50,100,0,5
  2173.  dc.w 60,1
  2174.  dc.w -1000
  2175.  
  2176.  ds.w 5
  2177.  
  2178.  
  2179. PLR2_GunData:
  2180. ; 0=Pistol 1=Big Gun
  2181. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2182.  
  2183. ; VISIBLE/INSTANT (0/FF)
  2184. ; damage,gotgun(b)
  2185. ; Delay (w)
  2186.  
  2187.  dc.w 0
  2188.  dc.b 8,3
  2189.  dc.b 20
  2190.  dc.b -1
  2191.  dc.b 1,$ff
  2192.  dc.w 5,-1,1,0
  2193.  dc.w 0,0
  2194.  
  2195.  ds.w 6
  2196.  
  2197.  dc.w 0
  2198.  dc.b 8,1
  2199.  dc.b 40
  2200.  dc.b 0
  2201.  dc.b 4,0
  2202.  dc.w 10,-1,0,5
  2203.  dc.w 0,0
  2204.  
  2205.  ds.w 6
  2206.  
  2207.  dc.w 0
  2208.  dc.b 8,9
  2209.  dc.b 5
  2210.  dc.b 0
  2211.  dc.b 10,0
  2212.  dc.w 50,-1,0,5
  2213.  dc.w 0,0
  2214.  
  2215.  ds.w 6
  2216.  
  2217.  dc.w 90*8
  2218.  dc.b 1,22
  2219.  dc.b 40
  2220.  dc.b 0
  2221.  dc.b 4,0    
  2222.  dc.w 0,-1,1,4
  2223.  dc.w 0,0
  2224.  
  2225.  ds.w 6
  2226.  
  2227.  dc.w 90*8
  2228.  dc.b 1,9
  2229.  dc.b 10
  2230.  dc.b 0
  2231.  dc.b 2,$ff
  2232.  dc.w 50,100,0,5
  2233.  dc.w 60
  2234.  dc.b 64,1
  2235.  dc.w -1000
  2236.  
  2237.  ds.w 5
  2238.  
  2239. protA: dc.w 0
  2240.  
  2241. Path:
  2242. ; incbin "testpath"
  2243. endpath:
  2244. pathpt: dc.l Path
  2245.  
  2246.  
  2247. PLR1KEYS: dc.b 0
  2248. PLR1PATH: dc.b 0
  2249. PLR1MOUSE: dc.b -1
  2250. PLR1JOY: dc.b 0
  2251. PLR2KEYS: dc.b 0
  2252. PLR2PATH: dc.b 0
  2253. PLR2MOUSE: dc.b -1
  2254. PLR2JOY: dc.b 0
  2255.  
  2256.  even
  2257.  
  2258. PLR1_bobble: dc.w 0
  2259. PLR2_bobble: dc.w 0
  2260. xwobble: dc.l 0
  2261. xwobxoff: dc.w 0
  2262. xwobzoff: dc.w 0
  2263.  
  2264. PLR1_Control:
  2265.  
  2266. ; Take a snapshot of everything.
  2267.  
  2268.  move.l PLR1_xoff,d2
  2269.  move.l d2,PLR1_oldxoff
  2270.  move.l d2,oldx
  2271.  move.l PLR1_zoff,d3
  2272.  move.l d3,PLR1_oldzoff
  2273.  move.l d3,oldz
  2274.  move.l p1_xoff,d0
  2275.  move.l d0,PLR1_xoff
  2276.  move.l d0,newx
  2277.  move.l p1_zoff,d1
  2278.  move.l d1,newz
  2279.  move.l d1,PLR1_zoff
  2280.  
  2281.  move.l p1_height,PLR1_height
  2282.  
  2283.  sub.l d2,d0
  2284.  sub.l d3,d1
  2285.  move.l d0,xdiff
  2286.  move.l d1,zdiff
  2287.  move.w p1_angpos,d0
  2288.  move.w d0,PLR1_angpos
  2289.  
  2290.  move.l #SineTable,a1
  2291.  move.w (a1,d0.w),PLR1_sinval
  2292.  add.w #2048,d0
  2293.  and.w #8190,d0
  2294.  move.w (a1,d0.w),PLR1_cosval
  2295.  
  2296.  move.l p1_yoff,d0
  2297.  move.w p1_bobble,d1
  2298.  move.w (a1,d1.w),d1
  2299.  move.w d1,d3
  2300.  ble.s notnegative
  2301.  neg.w d1
  2302. notnegative:
  2303.  add.w #16384,d1
  2304.  asr.w #4,d1
  2305.  add.w d1,d1
  2306.  ext.l d1
  2307.  add.l d1,d0
  2308.  
  2309.  asr.w #6,d3
  2310.  ext.l d3
  2311.  move.l d3,xwobble
  2312.  move.w PLR1_sinval,d1
  2313.  muls d3,d1
  2314.  move.w PLR1_cosval,d2
  2315.  muls d3,d2
  2316.  swap d1
  2317.  swap d2
  2318.  asr.w #7,d1
  2319.  move.w d1,xwobxoff
  2320.  asr.w #7,d2
  2321.  neg.w d2
  2322.  move.w d2,xwobzoff
  2323.  
  2324.  
  2325.  move.l d0,PLR1_yoff
  2326.  move.l d0,newy
  2327.  move.l d0,oldy
  2328.  move.l PLR1_height,thingheight
  2329.  move.l #40*256,StepUpVal
  2330.  tst.b PLR1_Ducked
  2331.  beq.s .okbigstep
  2332.  move.l #10*256,StepUpVal
  2333. .okbigstep:
  2334.  
  2335.  move.l #$1000000,StepDownVal
  2336.  
  2337.  move.l PLR1_Roompt,a0
  2338.  move.w ToTelZone(a0),d0
  2339.  blt .noteleport
  2340.  
  2341.  move.w ToTelX(a0),newx
  2342.  move.w ToTelZ(a0),newz
  2343.  move.w #-1,CollId
  2344.  move.w #%111111111111,CollideFlags
  2345.  bsr Collision
  2346.  tst.b hitwall
  2347.  beq.s .teleport
  2348.  
  2349.  move.w PLR1_xoff,newx
  2350.  move.w PLR1_zoff,newz
  2351.  bra .noteleport
  2352.  
  2353. .teleport:
  2354.  
  2355.  move.l PLR1_Roompt,a0
  2356.  move.w ToTelZone(a0),d0
  2357.  move.w ToTelX(a0),PLR1_xoff
  2358.  move.w ToTelZ(a0),PLR1_zoff
  2359.  move.l PLR1_yoff,d1
  2360.  sub.l ToZoneFloor(a0),d1
  2361.  move.l ZoneAdds,a0
  2362.  move.l (a0,d0.w*4),a0
  2363.  add.l LEVELDATA,a0
  2364.  move.l a0,PLR1_Roompt
  2365.  add.l ToZoneFloor(a0),d1
  2366.  move.l d1,PLR1s_yoff
  2367.  move.l d1,PLR1_yoff
  2368.  move.l d1,PLR1s_tyoff
  2369.  move.l PLR1_xoff,PLR1s_xoff
  2370.  move.l PLR1_zoff,PLR1s_zoff
  2371.  
  2372.  SAVEREGS
  2373.  move.w #0,Noisex
  2374.  move.w #0,Noisez
  2375.  move.w #26,Samplenum
  2376.  move.w #100,Noisevol
  2377.  move.b #$fa,IDNUM
  2378.  jsr MakeSomeNoise
  2379.  GETREGS
  2380.  
  2381.  bra .cantmove
  2382.  
  2383. .noteleport:
  2384.  
  2385.  move.l PLR1_Roompt,objroom
  2386.  move.w #%100000000,wallflags
  2387.  move.b PLR1_StoodInTop,StoodInTop
  2388.  
  2389.  move.w #%110111000001,CollideFlags
  2390.  move.w #-1,CollId
  2391.  
  2392.  bsr Collision
  2393.  tst.b hitwall
  2394.  beq.s .nothitanything
  2395.  move.w oldx,PLR1_xoff
  2396.  move.w oldz,PLR1_zoff
  2397.  move.l PLR1_xoff,PLR1s_xoff
  2398.  move.l PLR1_zoff,PLR1s_zoff
  2399.  bra .cantmove
  2400. .nothitanything:
  2401.  
  2402.  move.w #40,extlen
  2403.  move.b #0,awayfromwall
  2404.  
  2405.  clr.b exitfirst
  2406.  bsr MoveObject
  2407.  move.b StoodInTop,PLR1_StoodInTop
  2408.  move.l objroom,PLR1_Roompt
  2409.  move.w newx,PLR1_xoff
  2410.  move.w newz,PLR1_zoff
  2411.  move.l PLR1_xoff,PLR1s_xoff
  2412.  move.l PLR1_zoff,PLR1s_zoff
  2413.  
  2414. .cantmove:
  2415.  
  2416.  move.l PLR1_Roompt,a0
  2417.  
  2418.  move.l ToZoneFloor(a0),d0
  2419.  tst.b PLR1_StoodInTop
  2420.  beq.s notintop
  2421.  move.l ToUpperFloor(a0),d0
  2422. notintop:
  2423.  
  2424.  adda.w #ToZonePts,a0
  2425.  sub.l PLR1_height,d0
  2426.  move.l d0,PLR1s_tyoff
  2427.  move.w p1_angpos,tmpangpos
  2428.  
  2429. ; move.l (a0),a0        ; jump to viewpoint list
  2430.  * A0 is pointing at a pointer to list of points to rotate
  2431.  move.w (a0)+,d1
  2432.  ext.l d1
  2433.  add.l PLR1_Roompt,d1
  2434.  move.l d1,PLR1_PointsToRotatePtr
  2435.  tst.w (a0)+
  2436.  beq.s nobackgraphics
  2437.  move.l a0,-(a7)
  2438.  jsr putinbackdrop 
  2439.  move.l (a7)+,a0
  2440. nobackgraphics:
  2441.  adda.w #10,a0
  2442.  move.l a0,PLR1_ListOfGraphRooms
  2443.  
  2444. *****************************************************
  2445.  rts
  2446.  
  2447. CollId: dc.w 0
  2448.  
  2449. PLR2_Control:
  2450.  
  2451. ; Take a snapshot of everything.
  2452.  
  2453.  move.l PLR2_xoff,d2
  2454.  move.l d2,PLR2_oldxoff
  2455.  move.l d2,oldx
  2456.  move.l PLR2_zoff,d3
  2457.  move.l d3,PLR2_oldzoff
  2458.  move.l d3,oldz
  2459.  move.l p2_xoff,d0
  2460.  move.l d0,PLR2_xoff
  2461.  move.l d0,newx
  2462.  move.l p2_zoff,d1
  2463.  move.l d1,newz
  2464.  move.l d1,PLR2_zoff
  2465.  
  2466.  move.l p2_height,PLR2_height
  2467.  
  2468.  sub.l d2,d0
  2469.  sub.l d3,d1
  2470.  move.l d0,xdiff
  2471.  move.l d1,zdiff
  2472.  move.w p2_angpos,d0
  2473.  move.w d0,PLR2_angpos
  2474.  
  2475.  move.l #SineTable,a1
  2476.  move.w (a1,d0.w),PLR2_sinval
  2477.  add.w #2048,d0
  2478.  and.w #8190,d0
  2479.  move.w (a1,d0.w),PLR2_cosval
  2480.  
  2481.  move.l p2_yoff,d0
  2482.  move.w p2_bobble,d1
  2483.  move.w (a1,d1.w),d1
  2484.  move.w d1,d3
  2485.  ble.s .notnegative
  2486.  neg.w d1
  2487. .notnegative:
  2488.  add.w #16384,d1
  2489.  asr.w #4,d1
  2490.  add.w d1,d1
  2491.  ext.l d1
  2492.  add.l d1,d0
  2493.  
  2494.  asr.w #6,d3
  2495.  ext.l d3
  2496.  move.l d3,xwobble
  2497.  move.w PLR2_sinval,d1
  2498.  muls d3,d1
  2499.  move.w PLR2_cosval,d2
  2500.  muls d3,d2
  2501.  swap d1
  2502.  swap d2
  2503.  asr.w #7,d1
  2504.  move.w d1,xwobxoff
  2505.  asr.w #7,d2
  2506.  neg.w d2
  2507.  move.w d2,xwobzoff
  2508.  
  2509.  
  2510.  move.l d0,PLR2_yoff
  2511.  move.l d0,newy
  2512.  move.l d0,oldy
  2513.  move.l PLR2_height,thingheight
  2514.  move.l #40*256,StepUpVal
  2515.  tst.b PLR2_Ducked
  2516.  beq.s .okbigstep
  2517.  move.l #10*256,StepUpVal
  2518. .okbigstep:
  2519.  
  2520.  move.l #$1000000,StepDownVal
  2521.  
  2522.  move.l PLR2_Roompt,a0
  2523.  move.w ToTelZone(a0),d0
  2524.  blt .noteleport
  2525.  
  2526.  move.w ToTelX(a0),newx
  2527.  move.w ToTelZ(a0),newz
  2528.  move.w #-1,CollId
  2529.  move.w #%111111111111,CollideFlags
  2530.  bsr Collision
  2531.  tst.b hitwall
  2532.  beq.s .teleport
  2533.  
  2534.  move.w PLR2_xoff,newx
  2535.  move.w PLR2_zoff,newz
  2536.  bra .noteleport
  2537.  
  2538. .teleport:
  2539.  
  2540.  move.l PLR2_Roompt,a0
  2541.  move.w ToTelZone(a0),d0
  2542.  move.w ToTelX(a0),PLR2_xoff
  2543.  move.w ToTelZ(a0),PLR2_zoff
  2544.  move.l PLR2_yoff,d1
  2545.  sub.l ToZoneFloor(a0),d1
  2546.  move.l ZoneAdds,a0
  2547.  move.l (a0,d0.w*4),a0
  2548.  add.l LEVELDATA,a0
  2549.  move.l a0,PLR2_Roompt
  2550.  add.l ToZoneFloor(a0),d1
  2551.  move.l d1,PLR2s_yoff
  2552.  move.l d1,PLR2_yoff
  2553.  move.l d1,PLR2s_tyoff
  2554.  move.l PLR2_xoff,PLR2s_xoff
  2555.  move.l PLR2_zoff,PLR2s_zoff
  2556.  
  2557.  SAVEREGS
  2558.  move.w #0,Noisex
  2559.  move.w #0,Noisez
  2560.  move.w #26,Samplenum
  2561.  move.w #100,Noisevol
  2562.  move.b #$fa,IDNUM
  2563.  jsr MakeSomeNoise
  2564.  GETREGS
  2565.  
  2566.  bra .cantmove
  2567.  
  2568. .noteleport:
  2569.  
  2570.  
  2571.  move.l PLR2_Roompt,objroom
  2572.  move.w #%100000000000,wallflags
  2573.  move.b PLR2_StoodInTop,StoodInTop
  2574.  
  2575.  move.w #%010111100001,CollideFlags
  2576.  move.w #-1,CollId
  2577.  
  2578.  bsr Collision
  2579.  tst.b hitwall
  2580.  beq.s .nothitanything
  2581.  move.w oldx,PLR2_xoff
  2582.  move.w oldz,PLR2_zoff
  2583.  move.l PLR2_xoff,PLR2s_xoff
  2584.  move.l PLR2_zoff,PLR2s_zoff
  2585.  bra .cantmove
  2586. .nothitanything:
  2587.  
  2588.  move.w #40,extlen
  2589.  move.b #0,awayfromwall
  2590.  
  2591.  clr.b exitfirst
  2592.  bsr MoveObject
  2593.  move.b StoodInTop,PLR2_StoodInTop
  2594.  move.w #0,wallflags
  2595.  move.l objroom,PLR2_Roompt
  2596.  move.w newx,PLR2_xoff
  2597.  move.w newz,PLR2_zoff
  2598.  move.l PLR2_xoff,PLR2s_xoff
  2599.  move.l PLR2_zoff,PLR2s_zoff
  2600.  
  2601. .cantmove
  2602.  
  2603.  move.l PLR2_Roompt,a0
  2604.  
  2605.  move.l ToZoneFloor(a0),d0
  2606.  tst.b PLR2_StoodInTop
  2607.  beq.s .notintop
  2608.  move.l ToUpperFloor(a0),d0
  2609. .notintop:
  2610.  
  2611.  adda.w #ToZonePts,a0
  2612.  sub.l PLR2_height,d0
  2613.  move.l d0,PLR2s_tyoff
  2614.  move.w p2_angpos,tmpangpos
  2615.  
  2616. ; move.l (a0),a0        ; jump to viewpoint list
  2617.  * A0 is pointing at a pointer to list of points to rotate
  2618.  move.w (a0)+,d1
  2619.  ext.l d1
  2620.  add.l PLR2_Roompt,d1
  2621.  move.l d1,PLR2_PointsToRotatePtr
  2622.  tst.w (a0)+
  2623.  beq.s .nobackgraphics
  2624.  move.l a0,-(a7)
  2625.  jsr putinbackdrop 
  2626.  move.l (a7)+,a0
  2627. .nobackgraphics:
  2628.  adda.w #10,a0
  2629.  move.l a0,PLR2_ListOfGraphRooms
  2630.  
  2631. *****************************************************
  2632.  
  2633.  rts
  2634.  
  2635.  
  2636. KeyMap: ds.b 256
  2637.  
  2638.  
  2639. DrawDisplay:
  2640.  
  2641.  move.l #SineTable,a0
  2642.  move.w angpos,d0
  2643.  move.w (a0,d0.w),d6
  2644.  adda.w #2048,a0
  2645.  move.w (a0,d0.w),d7
  2646.  move.w d6,sinval
  2647.  move.w d7,cosval
  2648.  
  2649.  move.l yoff,d0
  2650.  asr.l #8,d0
  2651.  move.w d0,d1
  2652.  add.w #256-32,d1
  2653.  and.w #255,d1
  2654.  move.w d1,wallyoff
  2655.  asl.w #2,d0
  2656.  move.w d0,flooryoff
  2657.  
  2658.  move.w xoff,d6
  2659.  move.w d6,d3
  2660.  asr.w #1,d3
  2661.  add.w d3,d6
  2662.  asr.w #1,d6
  2663.  move.w d6,xoff34
  2664.  
  2665.  move.w zoff,d6
  2666.  move.w d6,d3
  2667.  asr.w #1,d3
  2668.  add.w d3,d6
  2669.  asr.w #1,d6
  2670.  move.w d6,zoff34
  2671.  
  2672.  bsr RotateLevelPts
  2673.  bsr RotateObjectPts
  2674.  bsr CalcPLR1InLine
  2675.  cmp.b #'n',mors
  2676.  bne.s doplr2too
  2677.  move.l PLR2_Obj,a0
  2678.  move.w #-1,12(a0)
  2679.  move.w #-1,GraphicRoom(a0)
  2680.  bra noplr2either
  2681.  
  2682. doplr2too:
  2683.  bsr CalcPLR2InLine
  2684. noplr2either:
  2685.  
  2686.  move.l endoflist,a0
  2687. subroomloop:
  2688.  move.w -(a0),d7
  2689.  blt jumpoutofrooms
  2690.  
  2691. ; bsr setlrclip
  2692. ; move.w leftclip,d0
  2693. ; cmp.w rightclip,d0
  2694. ; bge subroomloop
  2695.  move.l a0,-(a7)
  2696.  
  2697.  move.l ZoneAdds,a0
  2698.  move.l (a0,d7.w*4),a0
  2699.  add.l LEVELDATA,a0
  2700.  move.l ToZoneRoof(a0),SplitHeight
  2701.  
  2702.  move.l ZoneGraphAdds,a0
  2703.  move.l 4(a0,d7.w*8),a2
  2704.  move.l (a0,d7.w*8),a0
  2705.  
  2706.  add.l LEVELGRAPHICS,a0
  2707.  add.l LEVELGRAPHICS,a2
  2708.  move.l a2,ThisRoomToDraw+4
  2709.  move.l a0,ThisRoomToDraw
  2710.  
  2711.  move.l ListOfGraphRooms,a1
  2712.  
  2713. finditit:
  2714.  tst.w (a1)
  2715.  blt nomoretodoatall
  2716.  cmp.w (a1),d7
  2717.  beq outoffind
  2718.  adda.w #8,a1
  2719.  bra finditit
  2720.  
  2721. outoffind:
  2722.  
  2723.  move.l a1,-(a7)
  2724.  
  2725.  move.w #0,leftclip
  2726.  move.w #96,rightclip
  2727.  moveq #0,d7
  2728.  move.w 2(a1),d7
  2729.  blt.s outofrcliplop
  2730.  move.l LEVELCLIPS,a0
  2731.  lea (a0,d7.l*2),a0
  2732.  
  2733.  tst.w (a0)
  2734.  blt outoflcliplop
  2735.  
  2736.  bsr NEWsetlclip
  2737.  
  2738. intolcliplop:        ; clips
  2739.  tst.w (a0)
  2740.  blt outoflcliplop
  2741.  
  2742.  bsr NEWsetlclip 
  2743.  bra intolcliplop
  2744.  
  2745. outoflcliplop:
  2746.  
  2747.  addq #2,a0
  2748.  
  2749.  tst.w (a0)
  2750.  blt outofrcliplop
  2751.  
  2752.  bsr NEWsetrclip
  2753.  
  2754. intorcliplop:        ; clips
  2755.  tst.w (a0)
  2756.  blt outofrcliplop
  2757.  
  2758.  bsr NEWsetrclip 
  2759.  bra intorcliplop
  2760.  
  2761. outofrcliplop:
  2762.  
  2763.  move.w leftclip,d0
  2764.  cmp.w #95,d0
  2765.  bge dontbothercantseeit
  2766.  move.w rightclip,d1
  2767.  blt dontbothercantseeit
  2768.  cmp.w d1,d0
  2769.  bge dontbothercantseeit
  2770.  
  2771.  move.l yoff,d0
  2772.  cmp.l SplitHeight,d0
  2773.  blt.s botfirst
  2774.  
  2775.  move.l ThisRoomToDraw+4,a0
  2776.  cmp.l LEVELGRAPHICS,a0
  2777.  beq.s noupperroom
  2778.  st DOUPPER
  2779.  move.l #CurrentPointBrights+2,PointBrightsPtr
  2780.  bsr dothisroom
  2781. noupperroom:
  2782.  move.l ThisRoomToDraw,a0
  2783.  clr.b DOUPPER
  2784.  move.l #CurrentPointBrights,PointBrightsPtr
  2785.  bsr dothisroom
  2786.  
  2787.  bra dontbothercantseeit
  2788. botfirst:
  2789.  
  2790.  move.l ThisRoomToDraw,a0
  2791.  clr.b DOUPPER
  2792.  move.l #CurrentPointBrights,PointBrightsPtr
  2793.  bsr dothisroom
  2794.  move.l ThisRoomToDraw+4,a0
  2795.  cmp.l LEVELGRAPHICS,a0
  2796.  beq.s noupperroom2
  2797.  move.l #CurrentPointBrights+2,PointBrightsPtr
  2798.  st DOUPPER
  2799.  bsr dothisroom
  2800. noupperroom2:
  2801.  
  2802. dontbothercantseeit:
  2803. pastemp:
  2804.  
  2805.  move.l (a7)+,a1
  2806.  move.l ThisRoomToDraw,a0
  2807.  move.w (a0),d7
  2808.  adda.w #8,a1
  2809.  bra finditit
  2810.  
  2811. nomoretodoatall:
  2812.  
  2813.  move.l (a7)+,a0
  2814.  
  2815.  bra subroomloop
  2816.  
  2817. jumpoutofrooms:
  2818.  
  2819.  rts
  2820.  
  2821. prot9: dc.w 0
  2822.  
  2823. TempBuffer: ds.l 100 
  2824.  
  2825. ClipTable: ds.l 30
  2826. EndOfClipPt: dc.l 0
  2827. DOUPPER: dc.w 0
  2828.  
  2829. dothisroom
  2830.  
  2831.  move.w (a0)+,d0
  2832.  move.w d0,currzone
  2833.  move.l #ZoneBrightTable,a1
  2834.  move.l (a1,d0.w*4),d1
  2835.  tst.b DOUPPER
  2836.  bne.s .okbot
  2837.  swap d1
  2838. .okbot:
  2839.  move.w d1,ZoneBright
  2840.  
  2841. polyloop:
  2842.  move.w (a0)+,d0
  2843.  blt jumpoutofloop
  2844.  beq itsawall
  2845.  cmp.w #3,d0
  2846.  beq itsasetclip
  2847.  blt itsafloor
  2848.  cmp.w #4,d0
  2849.  beq itsanobject
  2850.  cmp.w #5,d0
  2851.  beq.s itsanarc
  2852.  cmp.w #6,d0
  2853.  beq itsalightbeam
  2854.  cmp.w #7,d0
  2855.  beq.s itswater
  2856.  cmp.w #9,d0
  2857.  ble itsachunkyfloor
  2858.  cmp.w #11,d0
  2859.  ble.s itsabumpyfloor
  2860.  cmp.w #12,d0
  2861.  beq.s itsbackdrop
  2862.  cmp.w #13,d0
  2863.  beq.s itsaseewall
  2864.  
  2865.  bra polyloop
  2866.  
  2867. itsaseewall:
  2868.  st seethru
  2869.  jsr itsawalldraw
  2870.  bra polyloop
  2871.  
  2872. itsbackdrop:
  2873.  jsr putinbackdrop
  2874.  bra polyloop
  2875.  
  2876. itswater:
  2877.  move.w #1,d0
  2878.  clr.b gourfloor
  2879.  move.l #FloorLine,LineToUse
  2880.  st usewater
  2881.  clr.b usebumps
  2882.  jsr itsafloordraw
  2883.  bra polyloop
  2884.  
  2885. itsanarc:
  2886.  jsr CurveDraw
  2887.  bra polyloop
  2888. itsanobject:
  2889.  jsr ObjDraw
  2890.  bra polyloop
  2891. itsalightbeam:
  2892.  jsr LightDraw
  2893.  bra polyloop
  2894.  
  2895. itsabumpyfloor:
  2896.  sub.w #9,d0
  2897.  st usebumps
  2898.  st smoothbumps
  2899.  clr.b usewater
  2900.  move.l #BumpLine,LineToUse
  2901.  jsr itsafloordraw
  2902.  bra polyloop
  2903.  
  2904. itsachunkyfloor:
  2905.  subq.w #7,d0
  2906.  st usebumps
  2907.  sub.w #12,topclip
  2908. ; add.w #10,botclip
  2909.  clr.b smoothbumps
  2910.  clr.b usewater
  2911.  move.l #BumpLine,LineToUse
  2912.  jsr itsafloordraw
  2913.  add.w #12,topclip
  2914. ; sub.w #10,botclip
  2915.  bra polyloop 
  2916.  
  2917. itsafloor:
  2918.  
  2919.  move.l #FloorLine,LineToUse
  2920. * 1,2 = floor/roof
  2921.  clr.b usewater
  2922.  clr.b usebumps
  2923.  st.b gourfloor    
  2924.  jsr itsafloordraw
  2925.  bra polyloop
  2926. itsasetclip:
  2927.  bra polyloop
  2928. itsawall:
  2929.  clr.b seethru
  2930. ; move.l #stripbuffer,a1
  2931.  jsr itsawalldraw
  2932.  bra polyloop
  2933.  
  2934. jumpoutofloop:
  2935.  rts
  2936.  
  2937. ThisRoomToDraw: dc.l 0,0
  2938. SplitHeight: dc.l 0
  2939.  
  2940.  include "ab3:source/OrderZones"
  2941.  
  2942. ReadMouse:
  2943.  move.l #$dff000,a6
  2944.  clr.l d0
  2945.  clr.l d1
  2946.  move.w $a(a6),d0
  2947.  lsr.w #8,d0
  2948.  ext.l d0
  2949.  move.w d0,d3
  2950.  move.w oldmy,d2
  2951.  sub.w d2,d0
  2952.  
  2953.  cmp.w #127,d0
  2954.  blt nonegy
  2955.  move.w #255,d1
  2956.  sub.w d0,d1
  2957.  move.w d1,d0
  2958.  neg.w d0
  2959. nonegy:
  2960.  
  2961.  cmp.w #-127,d0
  2962.  bge nonegy2
  2963.  move.w #255,d1
  2964.  add.w d0,d1
  2965.  move.w d1,d0
  2966. nonegy2:
  2967.  
  2968.  add.b d0,d2
  2969.  add.w d0,oldy2
  2970.  move.w d2,oldmy
  2971.  move.w d2,d0
  2972.  
  2973.  move.w oldy2,d0
  2974.  move.w d0,ymouse
  2975.  
  2976.  clr.l d0
  2977.  clr.l d1
  2978.  move.w $a(a6),d0
  2979.  ext.w d0
  2980.  ext.l d0
  2981.  move.w d0,d3
  2982.  move.w oldmx,d2
  2983.  sub.w d2,d0
  2984.  
  2985.  cmp.w #127,d0
  2986.  blt nonegx
  2987.  move.w #255,d1
  2988.  sub.w d0,d1
  2989.  move.w d1,d0
  2990.  neg.w d0
  2991. nonegx:
  2992.  
  2993.  cmp.w #-127,d0
  2994.  bge nonegx2
  2995.  move.w #255,d1
  2996.  add.w d0,d1
  2997.  move.w d1,d0
  2998. nonegx2:
  2999.  
  3000.  add.b d0,d2
  3001.  move.w d0,d1
  3002.  move.w d2,oldmx
  3003.  
  3004.  move.w #$0,$dff034
  3005.  btst #2,$dff016
  3006.  beq.s noturn
  3007.  
  3008.  add.w d0,oldx2
  3009.  move.w oldx2,d0
  3010.  and.w #2047,d0
  3011.  move.w d0,oldx2
  3012.  
  3013.  asl.w #2,d0
  3014.  sub.w prevx,d0
  3015.  add.w d0,prevx
  3016.  add.w d0,PLR1s_angpos
  3017.  move.w #0,lrs
  3018.  rts
  3019.  
  3020. noturn:
  3021.  
  3022. ; got to move lr instead. 
  3023.  
  3024. ; d1 = speed moved l/r
  3025.  
  3026.  move.w d1,lrs
  3027.  
  3028.  rts
  3029.  
  3030. lrs: dc.w 0
  3031. prevx: dc.w 0
  3032.  
  3033. mang: dc.w 0
  3034. oldymouse: dc.w 0
  3035. xmouse: dc.w 0
  3036. ymouse: dc.w 0
  3037. oldx2: dc.w 0
  3038. oldmx: dc.w 0
  3039. oldmy: dc.w 0
  3040. oldy2: dc.w 0
  3041.  
  3042. RotateLevelPts:
  3043.  
  3044.  move.w sinval,d6
  3045.  swap d6
  3046.  move.w cosval,d6
  3047.  
  3048.  move.l PointsToRotatePtr,a0
  3049.  move.l Points,a3
  3050.  move.l #Rotated,a1
  3051.  move.l #OnScreen,a2
  3052.  move.w xoff,d4
  3053.  move.w zoff,d5
  3054.  
  3055. ; move.w #$c40,$dff106
  3056. ; move.w #$f00,$dff180
  3057.  
  3058. pointrotlop:
  3059.  move.w (a0)+,d7
  3060.  blt.s outofpointrot
  3061.  
  3062.  move.w (a3,d7*4),d0
  3063.  sub.w d4,d0
  3064.  move.w d0,d2
  3065.  move.w 2(a3,d7*4),d1
  3066.  sub.w d5,d1
  3067.  muls d6,d2
  3068.  swap d6
  3069.  move.w d1,d3
  3070.  muls d6,d3
  3071.  sub.l d3,d2
  3072.  add.l d2,d2
  3073.  swap d2
  3074.  ext.l d2
  3075.  asl.l #7,d2
  3076.  add.l xwobble,d2
  3077.  move.l d2,(a1,d7*8)
  3078.  
  3079.  muls d6,d0
  3080.  swap d6
  3081.  muls d6,d1
  3082.  add.l d0,d1
  3083.  asl.l #2,d1
  3084.  swap d1
  3085.  move.l d1,4(a1,d7*8)
  3086.  
  3087.  tst.w d1
  3088.  bgt.s ptnotbehind
  3089.  tst.w d2
  3090.  bgt.s onrightsomewhere
  3091.  move.w #0,d2
  3092.  bra putin
  3093. onrightsomewhere:
  3094.  move.w #96,d2
  3095.  bra putin
  3096. ptnotbehind:
  3097.  
  3098.  divs d1,d2
  3099.  add.w #47,d2
  3100. putin:
  3101.  move.w d2,(a2,d7*2)
  3102.  
  3103.  bra pointrotlop
  3104. outofpointrot:
  3105.  
  3106. ; move.w #$c40,$dff106
  3107. ; move.w #$ff0,$dff180
  3108.  
  3109.  rts
  3110.  
  3111. PLR1_ObjDists
  3112.  ds.w 200
  3113. PLR2_ObjDists
  3114.  ds.w 200
  3115.  
  3116. CalcPLR1InLine:
  3117.  
  3118.  move.w PLR1_sinval,d5
  3119.  move.w PLR1_cosval,d6
  3120.  move.l ObjectData,a4
  3121.  move.l ObjectPoints,a0
  3122.  move.w NumObjectPoints,d7
  3123.  move.l #PLR1_ObsInLine,a2
  3124.  move.l #PLR1_ObjDists,a3
  3125.  
  3126. .objpointrotlop:
  3127.  
  3128.  move.w (a0),d0
  3129.  sub.w PLR1_xoff,d0
  3130.  move.w 4(a0),d1
  3131.  addq #8,a0
  3132.  
  3133.  tst.w 12(a4)
  3134.  blt .noworkout
  3135.  
  3136.  sub.w PLR1_zoff,d1
  3137.  move.w d0,d2
  3138.  muls d6,d2
  3139.  move.w d1,d3
  3140.  muls d5,d3
  3141.  sub.l d3,d2
  3142.  add.l d2,d2
  3143.  swap d2
  3144.  
  3145.  muls d5,d0
  3146.  muls d6,d1
  3147.  add.l d0,d1
  3148.  asl.l #2,d1
  3149.  swap d1
  3150.  moveq #0,d3
  3151.  
  3152.  ext.l d2
  3153.  tst.w d1
  3154.  ble.s .notinline
  3155.  cmp.w #40,d2
  3156.  bgt.s .notinline
  3157.  cmp.w #-40,d2
  3158.  blt.s .notinline
  3159.  
  3160.  
  3161.  st d3
  3162. .notinline
  3163.  move.b d3,(a2)+
  3164.  
  3165.  move.w d1,(a3)+
  3166.  
  3167.  add.w #64,a4
  3168.  dbra d7,.objpointrotlop
  3169.  
  3170.  rts
  3171.  
  3172. .noworkout:
  3173.  move.b #0,(a2)+
  3174.  move.w #0,(a3)+
  3175.  add.w #64,a4
  3176.  dbra d7,.objpointrotlop
  3177.  rts
  3178.  
  3179.  
  3180. CalcPLR2InLine:
  3181.  
  3182.  move.w PLR2_sinval,d5
  3183.  move.w PLR2_cosval,d6
  3184.  move.l ObjectData,a4
  3185.  move.l ObjectPoints,a0
  3186.  move.w NumObjectPoints,d7
  3187.  move.l #PLR2_ObsInLine,a2
  3188.  move.l #PLR2_ObjDists,a3
  3189.  
  3190. .objpointrotlop:
  3191.  
  3192.  move.w (a0),d0
  3193.  sub.w PLR2_xoff,d0
  3194.  move.w 4(a0),d1
  3195.  addq #8,a0
  3196.  
  3197.  tst.w 12(a4)
  3198.  blt .noworkout
  3199.  
  3200.  sub.w PLR2_zoff,d1
  3201.  move.w d0,d2
  3202.  muls d6,d2
  3203.  move.w d1,d3
  3204.  muls d5,d3
  3205.  sub.l d3,d2
  3206.  add.l d2,d2
  3207.  swap d2
  3208.  
  3209.  muls d5,d0
  3210.  muls d6,d1
  3211.  add.l d0,d1
  3212.  asl.l #2,d1
  3213.  swap d1
  3214.  moveq #0,d3
  3215.  
  3216.  ext.l d2
  3217.  asl.l #7,d2
  3218.  tst.w d1
  3219.  ble.s .notinline
  3220.  
  3221.  divs d1,d2
  3222.  cmp.w #20,d2
  3223.  bgt.s .notinline
  3224.  cmp.w #-20,d2
  3225.  blt.s .notinline
  3226.  st d3
  3227. .notinline
  3228.  move.b d3,(a2)+
  3229.  
  3230.  move.w d1,(a3)+
  3231.  
  3232.  add.w #64,a4
  3233.  dbra d7,.objpointrotlop
  3234.  
  3235.  rts
  3236.  
  3237. .noworkout:
  3238.  move.w #0,(a3)+
  3239.  move.b #0,(a2)+
  3240.  add.w #64,a4
  3241.  dbra d7,.objpointrotlop
  3242.  rts
  3243.  
  3244.  
  3245. RotateObjectPts:
  3246.  
  3247.  move.w sinval,d5
  3248.  move.w cosval,d6
  3249.  
  3250.  move.l ObjectData,a4
  3251.  move.l ObjectPoints,a0
  3252.  move.w NumObjectPoints,d7
  3253.  move.l #ObjRotated,a1
  3254.  
  3255.  
  3256. .objpointrotlop:
  3257.  
  3258.  move.w (a0),d0
  3259.  sub.w xoff,d0
  3260.  move.w 4(a0),d1
  3261.  addq #8,a0
  3262.  
  3263.  tst.w 12(a4)
  3264.  blt .noworkout
  3265.  
  3266.  sub.w zoff,d1
  3267.  move.w d0,d2
  3268.  muls d6,d2
  3269.  move.w d1,d3
  3270.  muls d5,d3
  3271.  sub.l d3,d2
  3272.  add.l d2,d2
  3273.  swap d2
  3274.  move.w d2,(a1)+
  3275.  
  3276.  muls d5,d0
  3277.  muls d6,d1
  3278.  add.l d0,d1
  3279.  asl.l #2,d1
  3280.  swap d1
  3281.  moveq #0,d3
  3282.  
  3283.  move.w d1,(a1)+
  3284.  ext.l d2
  3285.  asl.l #7,d2
  3286.  add.l xwobble,d2
  3287.  move.l d2,(a1)+
  3288.  sub.l xwobble,d2
  3289.  
  3290.  add.w #64,a4
  3291.  dbra d7,.objpointrotlop
  3292.  
  3293.  rts
  3294.  
  3295. .noworkout:
  3296.   move.l #0,(a1)+
  3297.   move.l #0,(a1)+
  3298.   add.w #64,a4
  3299.   dbra d7,.objpointrotlop
  3300.   rts
  3301.  
  3302. LightDraw:
  3303.  
  3304.  move.w (a0)+,d0
  3305.  move.w (a0)+,d1
  3306.  move.l #Rotated,a1
  3307.  move.w 6(a1,d0.w*8),d2
  3308.  ble.s oneendbehind
  3309.  move.w 6(a1,d1.w*8),d3
  3310.  bgt.s bothendsinfront
  3311.  
  3312. oneendbehind:
  3313.  rts
  3314. bothendsinfront:
  3315.  
  3316.  move.l #OnScreen,a2
  3317.  move.w (a2,d0.w*2),d0
  3318.  bge.s okleftend
  3319.  moveq #0,d0
  3320. okleftend:
  3321.  move.w (a2,d1.w*2),d1
  3322.  bgt.s somevis
  3323.  rts
  3324. somevis:
  3325.  cmp.w #95,d0
  3326.  ble.s somevis2
  3327.  rts
  3328. somevis2:
  3329.  cmp.w #95,d1
  3330.  ble.s okrightend
  3331.  move.w #95,d1
  3332. okrightend:
  3333.  
  3334.  sub.w d0,d1
  3335.  blt.s wrongbloodywayround
  3336.  move.l #brightentab,a4
  3337.  move.l #objintocop,a1
  3338.  lea (a1,d0.w*2),a1
  3339.  
  3340.  move.l frompt,a3
  3341.  move.w #104*4,d6
  3342.  move.w #79,d2
  3343. lacross:
  3344.  move.w d2,d3
  3345.  move.l a3,a2
  3346.  adda.w (a1)+,a2
  3347. ldown:
  3348.  add.w d6,a2
  3349.  move.w (a2),d7
  3350.  move.w (a4,d7.w*2),(a2)
  3351.  dbra d3,ldown
  3352.  dbra d1,lacross
  3353.  
  3354. wrongbloodywayround:
  3355.  
  3356.  rts
  3357.  
  3358. FaceToPlace: dc.w 0
  3359.  
  3360. Cheese:
  3361.  dc.w 4,15
  3362.  
  3363. FacesList:
  3364.  dc.w 0,4*4
  3365.  dc.w 1,2*4
  3366.  dc.w 0,2*4
  3367.  dc.w 2,2*4
  3368.  dc.w 0,2*4
  3369.  dc.w 1,3*4
  3370.  dc.w 0,2*4
  3371.  dc.w 2,3*4
  3372.  dc.w 0,5*4
  3373.  dc.w 1,2*4
  3374.  dc.w 0,2*4
  3375.  dc.w 2,2*4
  3376.  dc.w 0,2*4
  3377.  dc.w 1,2*4
  3378.  dc.w 0,2*4
  3379.  dc.w 2,3*4
  3380.  dc.w 0,1*4
  3381.  dc.w 1,3*4
  3382.  dc.w 0,1*4
  3383.  dc.w 2,3*4
  3384.  dc.w 0,1*4
  3385.  
  3386. EndOfFacesList:
  3387.  
  3388. FacesPtr:
  3389.  dc.l FacesList
  3390. FacesCounter:
  3391.  dc.w 0
  3392. Expression:
  3393.  dc.w 0
  3394.  
  3395. PlaceFace:
  3396.  
  3397.  move.w FacesCounter,d0
  3398.  subq #1,d0
  3399.  bgt.s NoNewFace
  3400.  
  3401.  move.l FacesPtr,a0
  3402.  
  3403.  move.w 2(a0),d0
  3404.  move.w (a0),Expression
  3405.  addq #4,a0
  3406.  cmp.l #EndOfFacesList,a0
  3407.  blt.s NotFirstFace
  3408.  
  3409.  move.l #FacesList,a0
  3410.  
  3411. NotFirstFace
  3412.  move.l a0,FacesPtr
  3413.  
  3414. NoNewFace:
  3415.  
  3416.  move.w d0,FacesCounter
  3417.  
  3418.  Move.w FaceToPlace,d0
  3419.  muls #5,d0
  3420.  add.w Expression,d0
  3421.  move.l #FacePlace+10,a0
  3422.  move.l #Faces,a1
  3423.  muls #(4*32*5),d0
  3424.  adda.w d0,a1
  3425.  move.w #4,d0
  3426.  move.w #24,d1
  3427.  
  3428.  move.w #4,d3
  3429. bitplaneloop:
  3430.  move.w #31,d2
  3431. PlaceFaceToPlaceInFacePlaceLoop:
  3432.  move.l (a1),(a0)
  3433.  adda.w d0,a1
  3434.  adda.w d1,a0
  3435.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  3436.  dbra d3,bitplaneloop
  3437.  
  3438.  rts
  3439.  
  3440. Energy:
  3441.  dc.w 191
  3442. OldEnergy:
  3443.  dc.w 191
  3444. Ammo: dc.w 63
  3445. OldAmmo: dc.w 63
  3446.  
  3447. FullEnergy:
  3448.  move.w #127,Energy
  3449.  move.w #127,OldEnergy
  3450.  move.l #health,a0
  3451.  move.l #borders,a1
  3452.  add.l #25*8*2+6,a1
  3453.  lea 2592(a1),a2
  3454.  move.w #127,d0
  3455. PutInFull:
  3456.  move.b (a0)+,(a1)
  3457.  move.b (a0)+,8(a1)
  3458.  add.w #16,a1
  3459.  move.b (a0)+,(a2)
  3460.  move.b (a0)+,8(a2)
  3461.  add.w #16,a2
  3462.  dbra d0,PutInFull
  3463.  
  3464.  rts
  3465.  
  3466. EnergyBar:
  3467.  
  3468.  move.w Energy,d0
  3469.  cmp.w OldEnergy,d0
  3470.  bne.s gottochange
  3471.  
  3472. NoChange
  3473.  rts
  3474.  
  3475. gottochange:
  3476.   
  3477.  blt LessEnergy
  3478.  cmp.w #127,Energy
  3479.  blt.s NotMax
  3480.  move.w #127,Energy
  3481. NotMax:
  3482.  
  3483.  move.w Energy,d0
  3484.  move.w OldEnergy,d2
  3485.  sub.w d0,d2
  3486.  beq.s NoChange    
  3487.  neg.w d2
  3488.  
  3489.  move.w #127,d3
  3490.  sub.w d0,d3
  3491.  
  3492.  move.l #health,a0
  3493.  lea (a0,d3.w*4),a0
  3494.  move.l #borders+25*16+6,a1
  3495.  lsl.w #4,d3
  3496.  add.w d3,a1
  3497.  lea 2592(a1),a2
  3498.  
  3499. EnergyRise:
  3500.  move.b (a0)+,(a1)
  3501.  move.b (a0)+,8(a1)
  3502.  add.w #16,a1
  3503.  move.b (a0)+,(a2)
  3504.  move.b (a0)+,8(a2)
  3505.  add.w #16,a2
  3506.  subq #1,d2
  3507.  bgt.s EnergyRise
  3508.  
  3509.  move.w Energy,OldEnergy
  3510.  
  3511.  rts 
  3512.  
  3513. LessEnergy: 
  3514.  move.w OldEnergy,d2
  3515.  sub.w d0,d2
  3516.  
  3517.  move.w #127,d3
  3518.  sub.w OldEnergy,d3
  3519.  
  3520.  move.l #borders+25*16+6,a1
  3521.  asl.w #4,d3
  3522.  add.w d3,a1
  3523.  lea 2592(a1),a2
  3524.  
  3525. EnergyDrain:
  3526.  move.b #0,(a1)
  3527.  move.b #0,8(a1)
  3528.  move.b #0,(a2)
  3529.  move.b #0,8(a2)
  3530.  add.w #16,a1
  3531.  add.w #16,a2
  3532.  subq #1,d2
  3533.  bgt.s EnergyDrain
  3534.  
  3535.  move.w Energy,OldEnergy
  3536.  
  3537.  rts 
  3538.  
  3539. AmmoBar:
  3540.  
  3541.  move.w Ammo,d0
  3542.  cmp.w OldAmmo,d0
  3543.  bne.s .gottochange
  3544.  
  3545. .NoChange
  3546.  rts
  3547.  
  3548. .gottochange:
  3549.   
  3550.  blt LessAmmo
  3551.  cmp.w #63,Ammo
  3552.  blt.s .NotMax
  3553.  move.w #63,Ammo
  3554. .NotMax:
  3555.  
  3556.  move.w Ammo,d0
  3557.  move.w OldAmmo,d2
  3558.  sub.w d0,d2
  3559.  beq.s .NoChange
  3560.  neg.w d2
  3561.  
  3562.  move.w #63,d3
  3563.  sub.w d0,d3
  3564.  
  3565.  move.l #Ammunition,a0
  3566.  lea (a0,d3.w*8),a0
  3567.  move.l #borders+5184+25*16+1,a1
  3568.  lsl.w #5,d3
  3569.  add.w d3,a1
  3570.  lea 2592(a1),a2
  3571.  
  3572. AmmoRise:
  3573.  move.b (a0)+,(a1)
  3574.  move.b (a0)+,8(a1)
  3575.  add.w #16,a1
  3576.  move.b (a0)+,(a2)
  3577.  move.b (a0)+,8(a2)
  3578.  add.w #16,a2
  3579.  move.b (a0)+,(a1)
  3580.  move.b (a0)+,8(a1)
  3581.  add.w #16,a1
  3582.  move.b (a0)+,(a2)
  3583.  move.b (a0)+,8(a2)
  3584.  add.w #16,a2
  3585.  subq #1,d2
  3586.  bgt.s AmmoRise
  3587.  
  3588.  move.w Ammo,OldAmmo
  3589.  
  3590.  rts 
  3591.  
  3592.  
  3593. LessAmmo: 
  3594.  move.w OldAmmo,d2
  3595.  sub.w d0,d2
  3596.  
  3597.  move.w #63,d3
  3598.  sub.w OldAmmo,d3
  3599.  
  3600.  move.l #borders++5184+25*16+1,a1
  3601.  asl.w #5,d3
  3602.  add.w d3,a1
  3603.  lea 2592(a1),a2
  3604.  
  3605. AmmoDrain:
  3606.  move.b #0,(a1)
  3607.  move.b #0,8(a1)
  3608.  move.b #0,(a2)
  3609.  move.b #0,8(a2)
  3610.  add.w #16,a1
  3611.  add.w #16,a2
  3612.  move.b #0,(a1)
  3613.  move.b #0,8(a1)
  3614.  move.b #0,(a2)
  3615.  move.b #0,8(a2)
  3616.  add.w #16,a1
  3617.  add.w #16,a2
  3618.  subq #1,d2
  3619.  bgt.s AmmoDrain
  3620.  
  3621.  move.w Ammo,OldAmmo
  3622.  
  3623.  rts 
  3624.  
  3625. nulop:
  3626.  move.w #$0010,$dff000+intreq
  3627.  rte
  3628.  
  3629. doanything: dc.w 0
  3630.  
  3631. end:
  3632.  
  3633.  move.l drawpt,d0
  3634.  move.l olddrawpt,drawpt
  3635.  move.l d0,olddrawpt
  3636.  move.l d0,$dff084
  3637.  
  3638.  clr.b doanything
  3639.  cmp.b #'b',Prefsfile+3
  3640.  bne.s .noback
  3641.  jsr mt_end
  3642. .noback
  3643.  tst.w Energy
  3644.  bgt.s wevewon
  3645.  
  3646.  move.l #gameover,mt_data
  3647.  st UseAllChannels
  3648.  clr.b reachedend
  3649.  jsr mt_init
  3650. playgameover:
  3651.  move.l #$dff000,a6
  3652. waitfortop2:
  3653.  btst.b #0,intreqrl(a6)
  3654.  beq waitfortop2
  3655.  move.w #$1,intreq(a6)
  3656.  
  3657.  jsr mt_music
  3658.  
  3659.  tst.b reachedend
  3660.  beq.s playgameover
  3661.  
  3662.  bra wevelost
  3663.  
  3664.  
  3665. wevewon:
  3666.  move.l #welldone,mt_data
  3667.  st UseAllChannels
  3668.  clr.b reachedend
  3669.  jsr mt_init
  3670. playwelldone:
  3671.  move.l #$dff000,a6
  3672. waitfortop3:
  3673.  btst.b #0,intreqrl(a6)
  3674.  beq waitfortop3
  3675.  move.w #$1,intreq(a6)
  3676.  
  3677.  jsr mt_music
  3678.  
  3679.  tst.b reachedend
  3680.  beq.s playwelldone
  3681.  
  3682. wevelost:
  3683.  jmp closeeverything 
  3684.  
  3685. endnomusic
  3686.  clr.b doanything
  3687.  cmp.b #'b',Prefsfile+3
  3688.  bne.s .noback
  3689.  jsr mt_end
  3690. .noback
  3691.  
  3692.  jmp closeeverything
  3693.  
  3694. do32:
  3695.  move.w #31,d7
  3696.  move.w #$180,d1
  3697. across:
  3698.  move.w d1,(a1)+
  3699.  move.w d1,(a3)+
  3700.  move.w #0,(a1)+
  3701.  move.w #0,(a3)+
  3702.  add.w #2,d1
  3703.  dbra d7,across
  3704.  rts
  3705.  
  3706.  
  3707.  
  3708. *************************************
  3709. * Set left and right clip values
  3710. *************************************
  3711.  
  3712.  
  3713.  
  3714. NEWsetlclip:
  3715.  move.l #OnScreen,a1
  3716.  move.l #Rotated,a2
  3717.  move.l CONNECT_TABLE,a3
  3718.  
  3719.  move.w (a0),d0
  3720.  bge.s .notignoreleft
  3721.  
  3722. ; move.l #0,(a6)
  3723.  
  3724.  bra .leftnotoktoclip
  3725. .notignoreleft:
  3726.  
  3727.  move.w 6(a2,d0*8),d3    ; left z val
  3728.  bgt.s .leftclipinfront
  3729.  addq #2,a0
  3730.  rts
  3731.  
  3732.  tst.w 6(a2,d0*8)
  3733.  bgt.s .leftnotoktoclip
  3734. .ignoreboth:
  3735. ; move.l #0,(a6)
  3736. ; move.l #96*65536,4(a6)
  3737.  move.w #0,leftclip
  3738.  move.w #96,rightclip
  3739.  addq #8,a6
  3740.  addq #2,a0
  3741.  rts
  3742.  
  3743. .leftclipinfront:
  3744.  move.w (a1,d0*2),d1    ; left x on screen
  3745.  move.w (a0),d2
  3746.  move.w 2(a3,d2.w*4),d2
  3747.  move.w (a1,d2.w*2),d2
  3748.  cmp.w d1,d2
  3749.  bgt.s .leftnotoktoclip
  3750.  
  3751. ; move.w d1,(a6)
  3752. ; move.w d3,2(a6)
  3753.  cmp.w leftclip,d1
  3754.  ble.s .leftnotoktoclip
  3755.  move.w d1,leftclip
  3756. .leftnotoktoclip:
  3757.  
  3758.  addq #2,a0
  3759.  
  3760.  rts
  3761.  
  3762. NEWsetrclip
  3763.  move.l #OnScreen,a1
  3764.  move.l #Rotated,a2
  3765.  move.l CONNECT_TABLE,a3
  3766.  move.w (a0),d0
  3767.  bge.s .notignoreright
  3768. ; move.w #96,4(a6)
  3769. ; move.w #0,6(a6)
  3770.  move.w #0,d4
  3771.  bra .rightnotoktoclip
  3772. .notignoreright:
  3773.  move.w 6(a2,d0*8),d4    ; right z val
  3774.  bgt.s .rightclipinfront
  3775. ; move.w #96,4(a6)
  3776. ; move.w #0,6(a6)
  3777.  bra.s .rightnotoktoclip
  3778.  
  3779. .rightclipinfront:
  3780.  move.w (a1,d0*2),d1    ; right x on screen
  3781.  move.w (a0),d2
  3782.  move.w (a3,d2.w*4),d2
  3783.  move.w (a1,d2.w*2),d2
  3784.  cmp.w d1,d2
  3785.  blt.s .rightnotoktoclip
  3786. ; move.w d1,4(a6)
  3787. ; move.w d4,6(a6)
  3788.  
  3789.  cmp.w rightclip,d1
  3790.  bge.s .rightnotoktoclip
  3791.  addq #1,d1
  3792.  move.w d1,rightclip
  3793. .rightnotoktoclip:
  3794.  addq #8,a6
  3795.  addq #2,a0
  3796.  rts
  3797.  
  3798. FIRSTsetlrclip:
  3799.  move.l #OnScreen,a1
  3800.  move.l #Rotated,a2
  3801.  
  3802.  move.w (a0)+,d0
  3803.  bge.s .notignoreleft
  3804.  bra .leftnotoktoclip
  3805. .notignoreleft:
  3806.  
  3807.  move.w 6(a2,d0*8),d3    ; left z val
  3808.  bgt.s .leftclipinfront
  3809.  
  3810.  move.w (a0),d0
  3811.  blt.s .ignoreboth
  3812.  tst.w 6(a2,d0*8)
  3813.  bgt.s .leftnotoktoclip
  3814. .ignoreboth
  3815.  move.w #96,rightclip
  3816.  move.w #0,leftclip
  3817.  addq #2,a0
  3818.  rts
  3819.  
  3820. .leftclipinfront:
  3821.  move.w (a1,d0*2),d1    ; left x on screen
  3822.  cmp.w leftclip,d1
  3823.  ble.s .leftnotoktoclip
  3824.  move.w d1,leftclip
  3825. .leftnotoktoclip:
  3826.  
  3827.  move.w (a0)+,d0
  3828.  bge.s .notignoreright
  3829.  move.w #0,d4
  3830.  bra .rightnotoktoclip
  3831. .notignoreright:
  3832.  move.w 6(a2,d0*8),d4    ; right z val
  3833.  ble.s .rightnotoktoclip
  3834.  
  3835. .rightclipinfront:
  3836.  move.w (a1,d0*2),d1    ; right x on screen
  3837.  cmp.w rightclip,d1
  3838.  bge.s .rightnotoktoclip
  3839.  addq #1,d1
  3840.  move.w d1,rightclip
  3841. .rightnotoktoclip:
  3842.  
  3843. ; move.w leftclip,d0
  3844. ; move.w rightclip,d1
  3845. ; cmp.w d0,d1
  3846. ; bge.s .noswap
  3847. ; move.w #96,rightclip
  3848. ; move.w #0,leftclip
  3849. ;.noswap:
  3850.  
  3851.  rts
  3852.  
  3853.  
  3854. leftclip2: dc.w 0
  3855. rightclip2: dc.w 0
  3856. ZoneBright: dc.w 0
  3857.  
  3858. npolys: dc.w 0
  3859.  
  3860. PLR1_fire: dc.b 0
  3861. PLR2_fire: dc.b 0
  3862.  
  3863. *****************************************************
  3864.  
  3865.  include "ab3:source/ObjectMove"
  3866.  
  3867. pastdata:
  3868. ***********************************
  3869. * This routine animates brightnesses.
  3870.  
  3871.  
  3872. liftpt: dc.l liftanimtab
  3873.  
  3874. brightpt:
  3875.  dc.l brightanimtab
  3876.  
  3877.  
  3878. liftanim:
  3879.  rts
  3880.  
  3881. ******************************
  3882.  include "ab3:source/Anims"
  3883. ******************************
  3884. startpass:
  3885. ; include "ab3:source/password_reloc.s"
  3886. endpass:
  3887.  
  3888. rotanimpt: dc.w 0
  3889. xradd: dc.w 5
  3890. yradd: dc.w 8
  3891. xrpos: dc.w 320
  3892. yrpos: dc.w 320
  3893.  
  3894. rotanim:
  3895.  rts
  3896.  
  3897. option:
  3898.  dc.l 0,0
  3899.  
  3900. ********** WALL STUFF *******************************
  3901.  
  3902.  include "AB3:source/wallroutine3.chipmem"
  3903.  
  3904. *****************************************************
  3905.  
  3906. ******************************************
  3907. * floor polygon
  3908.  
  3909. numsidestd: dc.w 0
  3910. bottomline: dc.w 0
  3911.  
  3912. NewCornerBuff:
  3913.  ds.l 100
  3914.  
  3915. itsafloordraw:
  3916.  
  3917. * If D0 =1 then its a floor otherwise (=2) it's
  3918. * a roof.
  3919.  
  3920.  move.w #0,above
  3921.  move.w (a0)+,d6    ; ypos of poly
  3922.  
  3923.  move.w leftclip(pc),d7
  3924.  cmp.w rightclip(pc),d7
  3925.  bge.s dontdrawreturn
  3926.  
  3927.  move.w botclip,d7
  3928.  sub.w #40,d7
  3929.  ble.s dontdrawreturn
  3930.  sub.w flooryoff,d6
  3931.  bgt.s below
  3932.  blt.s aboveplayer
  3933. dontdrawreturn:
  3934.  move.w (a0)+,d6    ; sides-1
  3935.  add.w d6,d6
  3936.  add.w d6,a0
  3937.  add.w #4+6,a0
  3938.  rts
  3939. aboveplayer:
  3940.  cmp.w #2,d0
  3941.  bne.s dontdrawreturn
  3942.  move.w #40,d7
  3943.  sub.w topclip,d7 
  3944.  blt.s dontdrawreturn
  3945.  move.w #1,d0
  3946.  move.w d0,above
  3947.  neg.w d6
  3948. below:
  3949.  cmp.w #1,d0
  3950.  bne.s dontdrawreturn
  3951.  move.w d6,distaddr
  3952.  muls #64,d6
  3953.  move.l d6,ypos
  3954.  divs d7,d6        ; zpos of bottom
  3955.             ; visible line
  3956.  move.w d6,minz
  3957.  move.w d7,bottomline
  3958.  
  3959. ; Go round each point finding out
  3960. ; if it should be visible or not.
  3961.  
  3962.  move.l a0,-(a7)
  3963.  
  3964.  move.w (a0)+,d7    ; number of sides
  3965.  move.l #Rotated,a1
  3966.  move.l #OnScreen,a2
  3967.  move.l #NewCornerBuff,a3
  3968.  moveq #0,d4
  3969.  moveq #0,d5
  3970.  moveq #0,d6
  3971.  clr.b anyclipping
  3972.  
  3973. cornerprocessloop:
  3974.  
  3975.  move.w (a0)+,d0
  3976.  move.w 6(a1,d0.w*8),d1
  3977.  ble  .canttell
  3978.  
  3979.  move.w (a2,d0.w*2),d3
  3980.  cmp.w leftclip,d3
  3981.  bgt.s .nol
  3982.  st d4
  3983.  st anyclipping
  3984.  bra.s .nos
  3985. .nol:
  3986.  cmp.w rightclip,d3
  3987.  blt.s .nor
  3988.  st d6
  3989.  st anyclipping
  3990.  bra.s .nos
  3991. .nor:
  3992.  st d5
  3993. .nos:
  3994.  bra .cantell
  3995.  
  3996. .canttell:
  3997.  st d5
  3998.  st anyclipping
  3999.  
  4000. .cantell:
  4001.  
  4002.  
  4003.  dbra d7,cornerprocessloop
  4004.  
  4005.  move.l (a7)+,a0
  4006.  tst.b d5
  4007.  bne.s somefloortodraw
  4008.  eor.b d4,d6
  4009.  bne dontdrawreturn
  4010.  
  4011. somefloortodraw:
  4012.  
  4013.  tst.b gourfloor
  4014.  bne goursides
  4015.  
  4016.  move.w #80,top
  4017.  move.w #-1,bottom
  4018.  move.w #0,drawit
  4019.  move.l #Rotated,a1
  4020.  move.l #OnScreen,a2
  4021.  move.w (a0)+,d7    ; no of sides
  4022. sideloop:
  4023.  move.w minz,d6
  4024.  move.w (a0)+,d1
  4025.  move.w (a0),d3
  4026.  move.w 6(a1,d1*8),d4    ;first z
  4027.  cmp.w d6,d4
  4028.  bgt firstinfront
  4029.  move.w 6(a1,d3*8),d5    ; sec z
  4030.  cmp.w d6,d5
  4031.  ble bothbehind
  4032. ** line must be on left and partially behind.
  4033.  sub.w d5,d4
  4034.  move.l (a1,d1*8),d0
  4035.  sub.l (a1,d3*8),d0
  4036.  asr.l #7,d0
  4037.  sub.w d5,d6
  4038.  muls d6,d0    ; new x coord
  4039.  divs d4,d0
  4040.  ext.l d0
  4041.  asl.l #7,d0
  4042.  
  4043.  add.l (a1,d3*8),d0
  4044.  move.w minz,d4
  4045.  move.w (a2,d3*2),d2
  4046.  divs d4,d0
  4047.  add.w #47,d0
  4048.  move.l ypos,d3
  4049.  divs d5,d3
  4050.  move.w bottomline,d1 
  4051.  bra lineclipped
  4052.  
  4053. firstinfront:
  4054.  move.w 6(a1,d3*8),d5    ; sec z
  4055.  cmp.w d6,d5
  4056.  bgt bothinfront
  4057. ** line must be on right and partially behind.
  4058.  sub.w d4,d5    ; dz
  4059.  move.l (a1,d3*8),d2
  4060.  sub.l (a1,d1*8),d2    ; dx
  4061.  sub.w d4,d6
  4062.  asr.l #7,d2
  4063.  muls d6,d2    ; new x coord
  4064.  divs d5,d2
  4065.  ext.l d2
  4066.  asl.l #7,d2
  4067.  add.l (a1,d1*8),d2
  4068.  move.w minz,d5
  4069.  move.w (a2,d1*2),d0
  4070.  divs d5,d2
  4071.  add.w #47,d2
  4072.  move.l ypos,d1
  4073.  divs d4,d1
  4074.  move.w bottomline,d3 
  4075.  bra lineclipped
  4076.  
  4077. bothinfront:
  4078.  
  4079. * Also, usefully enough, both are on-screen
  4080. * so no bottom clipping is needed.
  4081.  
  4082.  move.w (a2,d1*2),d0    ; first x
  4083.  move.w (a2,d3*2),d2    ; second x
  4084.  move.l ypos,d1
  4085.  move.l d1,d3
  4086.  divs d4,d1        ; first y
  4087.  divs d5,d3        ; second y
  4088. lineclipped:
  4089.  move.l #rightsidetab,a3
  4090.  cmp.w d1,d3
  4091.  beq lineflat
  4092.  st drawit
  4093.  bgt lineonright
  4094.  move.l #leftsidetab,a3
  4095.  exg d1,d3
  4096.  exg d0,d2
  4097.  
  4098.  lea (a3,d1*2),a3
  4099.  
  4100.  cmp.w top(pc),d1
  4101.  bge.s .nonewtop
  4102.  move.w d1,top
  4103. .nonewtop:
  4104.  cmp.w bottom(pc),d3
  4105.  ble.s .nonewbot
  4106.  move.w d3,bottom
  4107. .nonewbot:
  4108.  
  4109.  sub.w d1,d3    ; dy
  4110.  sub.w d0,d2    ; dx
  4111.  
  4112.  blt .linegoingleft
  4113.  sub.w #1,d0
  4114.  
  4115.  ext.l d2
  4116.  divs d3,d2
  4117.  move.w d2,d6
  4118.  swap d2
  4119.  
  4120. ; moveq #0,d6
  4121. ; sub.w d3,d2
  4122. ; blt.s .noco
  4123. ;.makeco
  4124. ; addq #1,d6
  4125. ; sub.w d3,d2
  4126. ; bge.s .makeco
  4127. ;.noco
  4128. ; add.w d3,d2
  4129.  
  4130.  move.w d3,d4
  4131.  move.w d3,d5
  4132.  subq #1,d5
  4133.  move.w d6,d1
  4134.  addq #1,d1
  4135.  
  4136. .pixlopright:
  4137.  move.w d0,(a3)+
  4138.  sub.w d2,d4
  4139.  bge.s .nobigstep
  4140.  add.w d1,d0
  4141.  add.w d3,d4
  4142.  dbra d5,.pixlopright
  4143.  bra lineflat
  4144. .nobigstep
  4145.  add.w d6,d0
  4146.  dbra d5,.pixlopright
  4147.  bra lineflat
  4148.  
  4149. .linegoingleft:
  4150.  
  4151.  sub.w #1,d0
  4152.  
  4153.  neg.w d2
  4154.  
  4155.  ext.l d2
  4156.  divs d3,d2
  4157.  move.w d2,d6
  4158.  swap d2
  4159.  
  4160.  
  4161. ; moveq #0,d6
  4162. ; sub.w d3,d2
  4163. ; blt.s .nocol
  4164. ;.makecol
  4165. ; addq #1,d6
  4166. ; sub.w d3,d2
  4167. ; bge.s .makecol
  4168. ;.nocol
  4169. ; add.w d3,d2
  4170.  
  4171.  
  4172.  
  4173.  move.w d3,d4
  4174.  move.w d3,d5
  4175.  subq #1,d5
  4176.  
  4177.  move.w d6,d1
  4178.  addq #1,d1
  4179.  
  4180. .pixlopleft:
  4181.  sub.w d2,d4
  4182.  bge.s .nobigstepl
  4183.  sub.w d1,d0
  4184.  add.w d3,d4
  4185.  move.w d0,(a3)+
  4186.  dbra d5,.pixlopleft
  4187.  bra lineflat
  4188.  
  4189. .nobigstepl
  4190.  sub.w d6,d0
  4191.  move.w d0,(a3)+
  4192.  dbra d5,.pixlopleft
  4193.  bra lineflat
  4194.  
  4195. lineonright:
  4196.  
  4197.  lea (a3,d1*2),a3
  4198.  
  4199.  cmp.w top(pc),d1
  4200.  bge.s .nonewtop
  4201.  move.w d1,top
  4202. .nonewtop:
  4203.  cmp.w bottom(pc),d3
  4204.  ble.s .nonewbot
  4205.  move.w d3,bottom
  4206. .nonewbot:
  4207.  
  4208.  sub.w d1,d3    ; dy
  4209.  sub.w d0,d2    ; dx
  4210.  blt .linegoingleft
  4211. ; addq #1,d0
  4212.  ext.l d2
  4213.  divs d3,d2
  4214.  move.w d2,d6
  4215.  swap d2
  4216.  
  4217. ; moveq #0,d6
  4218. ; sub.w d3,d2
  4219. ; blt.s .noco
  4220. ;.makeco
  4221. ; addq #1,d6
  4222. ; sub.w d3,d2
  4223. ; bge.s .makeco
  4224. ;.noco
  4225. ; add.w d3,d2
  4226.  
  4227.  move.w d3,d4
  4228.  move.w d3,d5
  4229.  subq #1,d5
  4230.  move.w d6,d1
  4231.  addq #1,d1
  4232.  
  4233. .pixlopright:
  4234.  sub.w d2,d4
  4235.  bge.s .nobigstep
  4236.  add.w d1,d0
  4237.  add.w d3,d4
  4238.  move.w d0,(a3)+
  4239.  dbra d5,.pixlopright
  4240.  bra lineflat
  4241.  
  4242. .nobigstep
  4243.  add.w d6,d0
  4244.  move.w d0,(a3)+
  4245.  dbra d5,.pixlopright
  4246.  bra lineflat
  4247.  
  4248. .linegoingleft:
  4249. ; addq #1,d0
  4250.  neg.w d2
  4251.  
  4252.  ext.l d2
  4253.  divs d3,d2
  4254.  move.w d2,d6
  4255.  swap d2
  4256.  
  4257.  
  4258. ; moveq #0,d6
  4259. ; sub.w d3,d2
  4260. ; blt.s .nocol
  4261. ;.makecol
  4262. ; addq #1,d6
  4263. ; sub.w d3,d2
  4264. ; bge.s .makecol
  4265. ;.nocol
  4266. ; add.w d3,d2
  4267.  
  4268.  move.w d3,d4
  4269.  move.w d3,d5
  4270.  subq #1,d5
  4271.  move.w d6,d1
  4272.  addq #1,d1
  4273.  
  4274. .pixlopleft:
  4275.  move.w d0,(a3)+
  4276.  sub.w d2,d4
  4277.  bge.s .nobigstepl
  4278.  sub.w d1,d0
  4279.  add.w d3,d4
  4280.  dbra d5,.pixlopleft
  4281.  bra lineflat
  4282.  
  4283. .nobigstepl
  4284.  sub.w d6,d0
  4285.  dbra d5,.pixlopleft
  4286.  
  4287. lineflat:
  4288.  
  4289. bothbehind:
  4290.  dbra d7,sideloop
  4291.  bra pastsides
  4292.  
  4293. fbr: dc.w 0
  4294. sbr: dc.w 0
  4295.  
  4296. goursides:
  4297.  
  4298.  move.w #80,top
  4299.  move.w #-1,bottom
  4300.  move.w #0,drawit
  4301.  move.l #Rotated,a1
  4302.  move.l #OnScreen,a2
  4303.  move.w (a0)+,d7    ; no of sides
  4304. sideloopGOUR:
  4305.  move.w minz,d6
  4306.  move.w (a0)+,d1
  4307.  move.w (a0),d3
  4308.  
  4309.  move.l PointBrightsPtr,a4
  4310.  move.w (a4,d1.w*4),fbr
  4311.  move.w (a4,d3.w*4),sbr
  4312.  
  4313.  move.w 6(a1,d1*8),d4    ;first z
  4314.  cmp.w d6,d4
  4315.  bgt firstinfrontGOUR
  4316.  move.w 6(a1,d3*8),d5    ; sec z
  4317.  cmp.w d6,d5
  4318.  ble bothbehindGOUR
  4319. ** line must be on left and partially behind.
  4320.  sub.w d5,d4
  4321.  
  4322.  move.w fbr,d0
  4323.  sub.w sbr,d0
  4324.  sub.w d5,d6
  4325.  muls d6,d0
  4326.  divs d4,d0
  4327.  add.w sbr,d0
  4328.  move.w d0,fbr
  4329.  
  4330.  move.l (a1,d1*8),d0
  4331.  sub.l (a1,d3*8),d0
  4332.  asr.l #7,d0
  4333.  muls d6,d0    ; new x coord
  4334.  divs d4,d0
  4335.  ext.l d0
  4336.  asl.l #7,d0
  4337.  
  4338.  add.l (a1,d3*8),d0
  4339.  move.w minz,d4
  4340.  move.w (a2,d3*2),d2
  4341.  divs d4,d0
  4342.  add.w #47,d0
  4343.  move.l ypos,d3
  4344.  divs d5,d3
  4345.  
  4346.  move.w bottomline,d1 
  4347.  bra lineclippedGOUR
  4348.  
  4349. firstinfrontGOUR:
  4350.  move.w 6(a1,d3*8),d5    ; sec z
  4351.  cmp.w d6,d5
  4352.  bgt bothinfrontGOUR
  4353. ** line must be on right and partially behind.
  4354.  sub.w d4,d5    ; dz
  4355.  
  4356.  move.w sbr,d2
  4357.  sub.w fbr,d2
  4358.  sub.w d4,d6
  4359.  muls d6,d2
  4360.  divs d5,d2
  4361.  add.w fbr,d2
  4362.  move.w d2,sbr
  4363.  
  4364.  move.l (a1,d3*8),d2
  4365.  sub.l (a1,d1*8),d2    ; dx
  4366.  asr.l #7,d2
  4367.  muls d6,d2    ; new x coord
  4368.  divs d5,d2
  4369.  ext.l d2
  4370.  asl.l #7,d2
  4371.  add.l (a1,d1*8),d2
  4372.  move.w minz,d5
  4373.  move.w (a2,d1*2),d0
  4374.  divs d5,d2
  4375.  add.w #47,d2
  4376.  move.l ypos,d1
  4377.  divs d4,d1
  4378.  move.w bottomline,d3 
  4379.  bra lineclippedGOUR
  4380.  
  4381. bothinfrontGOUR:
  4382.  
  4383. * Also, usefully enough, both are on-screen
  4384. * so no bottom clipping is needed.
  4385.  
  4386.  move.w (a2,d1*2),d0    ; first x
  4387.  move.w (a2,d3*2),d2    ; second x
  4388.  move.l ypos,d1
  4389.  move.l d1,d3
  4390.  divs d4,d1        ; first y
  4391.  divs d5,d3        ; second y
  4392. lineclippedGOUR:
  4393.  move.l #rightsidetab,a3
  4394.  cmp.w d1,d3
  4395.  bne linenotflatGOUR
  4396.  
  4397. ; move.w fbr,d4
  4398. ; move.w sbr,d5
  4399. ; cmp.w d0,d2
  4400. ; bgt.s .nsw
  4401. ; exg d4,d5
  4402. ;.nsw:
  4403.  
  4404. ; move.l #leftbrighttab,a3
  4405. ; move.w d4,(a3,d3.w)
  4406. ; move.l #rightbrighttab,a3
  4407. ; move.w d5,(a3,d3.w) 
  4408.  bra lineflatGOUR
  4409.  
  4410. linenotflatGOUR
  4411.  st drawit
  4412.  bgt lineonrightGOUR
  4413.  move.l #leftsidetab,a3
  4414.  exg d1,d3
  4415.  exg d0,d2
  4416.  
  4417.  lea (a3,d1*2),a3
  4418.  lea leftbrighttab-leftsidetab(a3),a4
  4419.  
  4420.  cmp.w top(pc),d1
  4421.  bge.s .nonewtop
  4422.  move.w d1,top
  4423. .nonewtop:
  4424.  cmp.w bottom(pc),d3
  4425.  ble.s .nonewbot
  4426.  move.w d3,bottom
  4427. .nonewbot:
  4428.  
  4429.  sub.w d1,d3    ; dy
  4430.  sub.w d0,d2    ; dx
  4431.  
  4432.  blt .linegoingleft
  4433.  sub.w #1,d0
  4434.  
  4435.  ext.l d2
  4436.  divs d3,d2
  4437.  move.w d2,d6
  4438.  swap d2
  4439.  move.w d2,a5
  4440.  
  4441. ; moveq #0,d6
  4442. ; sub.w d3,d2
  4443. ; blt.s .noco
  4444. ;.makeco
  4445. ; addq #1,d6
  4446. ; sub.w d3,d2
  4447. ; bge.s .makeco
  4448. ;.noco
  4449. ; add.w d3,d2
  4450.  
  4451.  move.w d3,d4
  4452.  move.w d3,d5
  4453.  subq #1,d5
  4454.  move.w d6,d1
  4455.  addq #1,d1
  4456.  move.w d1,a6
  4457.  
  4458.  moveq #0,d1
  4459.  move.w sbr,d1
  4460.  move.w fbr,d2
  4461.  sub.w d1,d2
  4462.  ext.l d2
  4463.  asl.w #8,d2
  4464.  asl.w #3,d2
  4465.  divs d3,d2 
  4466.  ext.l d2
  4467.  asl.l #5,d2
  4468.  swap d1
  4469.  
  4470. .pixlopright:
  4471.  move.w d0,(a3)+
  4472.  swap d1
  4473.  move.w d1,(a4)+
  4474.  swap d1
  4475.  add.l d2,d1
  4476.  
  4477.  sub.w a5,d4
  4478.  bge.s .nobigstep
  4479.  add.w a6,d0
  4480.  add.w d3,d4
  4481.  dbra d5,.pixlopright
  4482.  bra lineflatGOUR
  4483. .nobigstep
  4484.  
  4485.  add.w d6,d0
  4486.  dbra d5,.pixlopright
  4487.  bra lineflatGOUR
  4488.  
  4489. .linegoingleft:
  4490.  
  4491.  sub.w #1,d0
  4492.  
  4493.  neg.w d2
  4494.  
  4495.  ext.l d2
  4496.  divs d3,d2
  4497.  move.w d2,d6
  4498.  swap d2
  4499.  
  4500.  
  4501. ; moveq #0,d6
  4502. ; sub.w d3,d2
  4503. ; blt.s .nocol
  4504. ;.makecol
  4505. ; addq #1,d6
  4506. ; sub.w d3,d2
  4507. ; bge.s .makecol
  4508. ;.nocol
  4509. ; add.w d3,d2
  4510.  
  4511.  move.w d3,d4
  4512.  move.w d3,d5
  4513.  subq #1,d5
  4514.  
  4515.  move.w d6,d1
  4516.  addq #1,d1
  4517.  move.w d1,a6
  4518.  move.w d2,a5
  4519.  
  4520.  moveq #0,d1
  4521.  move.w sbr,d1
  4522.  move.w fbr,d2
  4523.  sub.w d1,d2
  4524.  ext.l d2
  4525.  asl.w #8,d2
  4526.  asl.w #3,d2
  4527.  divs d3,d2 
  4528.  ext.l d2
  4529.  asl.l #5,d2
  4530.  swap d1
  4531.  
  4532. .pixlopleft:
  4533.  
  4534.  swap d1
  4535.  move.w d1,(a4)+
  4536.  swap d1
  4537.  add.l d2,d1
  4538.  
  4539.  sub.w a5,d4
  4540.  bge.s .nobigstepl
  4541.  sub.w a6,d0
  4542.  add.w d3,d4
  4543.  move.w d0,(a3)+
  4544.  dbra d5,.pixlopleft
  4545.  bra lineflatGOUR
  4546.  
  4547. .nobigstepl
  4548.  sub.w d6,d0
  4549.  move.w d0,(a3)+
  4550.  dbra d5,.pixlopleft
  4551.  bra lineflatGOUR
  4552.  
  4553. lineonrightGOUR:
  4554.  
  4555.  lea (a3,d1*2),a3
  4556.  
  4557.  lea rightbrighttab-rightsidetab(a3),a4
  4558.  
  4559.  cmp.w top(pc),d1
  4560.  bge.s .nonewtop
  4561.  move.w d1,top
  4562. .nonewtop:
  4563.  cmp.w bottom(pc),d3
  4564.  ble.s .nonewbot
  4565.  move.w d3,bottom
  4566. .nonewbot:
  4567.  
  4568.  sub.w d1,d3    ; dy
  4569.  sub.w d0,d2    ; dx
  4570.  blt .linegoingleft
  4571. ; addq #1,d0
  4572.  ext.l d2
  4573.  divs d3,d2
  4574.  move.w d2,d6
  4575.  swap d2
  4576.  
  4577. ; moveq #0,d6
  4578. ; sub.w d3,d2
  4579. ; blt.s .noco
  4580. ;.makeco
  4581. ; addq #1,d6
  4582. ; sub.w d3,d2
  4583. ; bge.s .makeco
  4584. ;.noco
  4585. ; add.w d3,d2
  4586.  
  4587.  move.w d3,d4
  4588.  move.w d3,d5
  4589.  subq #1,d5
  4590.  move.w d6,d1
  4591.  addq #1,d1
  4592.  
  4593.  move.w d1,a6
  4594.  move.w d2,a5
  4595.  
  4596.  moveq #0,d1
  4597.  move.w fbr,d1
  4598.  move.w sbr,d2
  4599.  sub.w d1,d2
  4600.  ext.l d2
  4601.  asl.w #8,d2
  4602.  asl.w #3,d2
  4603.  divs d3,d2 
  4604.  ext.l d2
  4605.  asl.l #5,d2
  4606.  swap d1
  4607.  
  4608. .pixlopright:
  4609.  
  4610.  swap d1
  4611.  move.w d1,(a4)+
  4612.  swap d1
  4613.  add.l d2,d1
  4614.  
  4615.  sub.w a5,d4
  4616.  bge.s .nobigstep
  4617.  add.w a6,d0
  4618.  add.w d3,d4
  4619.  move.w d0,(a3)+
  4620.  dbra d5,.pixlopright
  4621.  bra lineflatGOUR
  4622.  
  4623. .nobigstep
  4624.  add.w d6,d0
  4625.  move.w d0,(a3)+
  4626.  dbra d5,.pixlopright
  4627.  bra lineflatGOUR
  4628.  
  4629. .linegoingleft:
  4630. ; addq #1,d0
  4631.  neg.w d2
  4632.  
  4633.  ext.l d2
  4634.  divs d3,d2
  4635.  move.w d2,d6
  4636.  swap d2
  4637.  
  4638.  
  4639. ; moveq #0,d6
  4640. ; sub.w d3,d2
  4641. ; blt.s .nocol
  4642. ;.makecol
  4643. ; addq #1,d6
  4644. ; sub.w d3,d2
  4645. ; bge.s .makecol
  4646. ;.nocol
  4647. ; add.w d3,d2
  4648.  
  4649.  move.w d3,d4
  4650.  move.w d3,d5
  4651.  subq #1,d5
  4652.  move.w d6,d1
  4653.  addq #1,d1
  4654.  move.w d1,a6
  4655.  move.w d2,a5
  4656.  
  4657.  moveq #0,d1
  4658.  move.w fbr,d1
  4659.  move.w sbr,d2
  4660.  sub.w d1,d2
  4661.  ext.l d2
  4662.  asl.w #8,d2
  4663.  asl.w #3,d2
  4664.  divs d3,d2 
  4665.  ext.l d2
  4666.  asl.l #5,d2
  4667.  swap d1
  4668.  
  4669. .pixlopleft:
  4670.  
  4671.  swap d1
  4672.  move.w d1,(a4)+
  4673.  swap d1
  4674.  add.l d2,d1
  4675.  
  4676.  move.w d0,(a3)+
  4677.  sub.w a5,d4
  4678.  bge.s .nobigstepl
  4679.  sub.w a6,d0
  4680.  add.w d3,d4
  4681.  dbra d5,.pixlopleft
  4682.  bra lineflatGOUR
  4683.  
  4684. .nobigstepl
  4685.  sub.w d6,d0
  4686.  dbra d5,.pixlopleft
  4687.  
  4688. lineflatGOUR:
  4689.  
  4690. bothbehindGOUR:
  4691.  dbra d7,sideloopGOUR
  4692.  
  4693. pastsides:
  4694.  
  4695.  
  4696.  addq #2,a0
  4697.  
  4698.  move.w #104*4,linedir
  4699.  move.l frompt,a6
  4700.  add.l #104*4*41,a6
  4701.  move.w (a0)+,scaleval
  4702.  move.w (a0)+,whichtile
  4703.  move.w (a0)+,d6
  4704.  add.w ZoneBright,d6
  4705.  move.w d6,lighttype
  4706.  move.w above(pc),d6
  4707.  beq groundfloor
  4708. * on ceiling:
  4709.  move.w #-104*4,linedir
  4710.  suba.w #104*4,a6
  4711. groundfloor:
  4712.  
  4713.  move.w xoff,d6
  4714.  move.w zoff,d7
  4715.  add.w xwobxoff,d7
  4716.  add.w xwobzoff,d6
  4717.  swap d6
  4718.  swap d7
  4719.  clr.w d6
  4720.  clr.w d7
  4721.  move.w scaleval(pc),d3
  4722.  beq.s .samescale
  4723.  bgt.s .scaledown
  4724.  neg.w d3
  4725.  asr.l d3,d7
  4726.  asr.l d3,d6
  4727.  bra.s .samescale
  4728. .scaledown:
  4729.  asl.l d3,d6
  4730.  asl.l d3,d7
  4731. .samescale
  4732.  move.l d6,sxoff
  4733.  move.l d7,szoff
  4734.  bra pastscale 
  4735.  
  4736.  asr.l #3,d1
  4737.  asr.l #3,d2
  4738.  asr.l #2,d1
  4739.  asr.l #2,d2
  4740.  asr.l #1,d1
  4741.  asr.l #1,d2
  4742. scaleprogfrom
  4743.  nop
  4744.  nop
  4745.  asl.l #1,d1
  4746.  asl.l #1,d2
  4747.  asl.l #2,d1
  4748.  asl.l #2,d2
  4749.  asl.l #3,d1
  4750.  asl.l #3,d2
  4751.  
  4752. top: dc.w 0
  4753. bottom: dc.w 0
  4754. ypos: dc.l 0
  4755. nfloors: dc.w 0
  4756. lighttype: dc.w 0
  4757. above: dc.w 0 
  4758. linedir: dc.w 0
  4759. distaddr: dc.w 0
  4760.  
  4761. minz: dc.w 0
  4762. leftsidetab:
  4763.  ds.w 180
  4764. rightsidetab:
  4765.  ds.w 180
  4766. leftbrighttab:
  4767.  ds.w 180
  4768. rightbrighttab:
  4769.  ds.w 180
  4770.  
  4771. PointBrights:
  4772.  dc.l 0
  4773. CurrentPointBrights:
  4774.  ds.l 1000
  4775.  
  4776. movespd: dc.w 0
  4777. largespd: dc.l 0
  4778.  
  4779. pastscale:
  4780.  
  4781.  tst.b drawit(pc)
  4782.  beq dontdrawfloor
  4783.  
  4784.  move.l a0,-(a7)
  4785.  
  4786.  move.l #leftsidetab,a4
  4787.  move.w top(pc),d1
  4788.  move.w bottom(pc),d7
  4789.  tst.w above
  4790.  beq.s clipfloor
  4791.  
  4792.  move.w #40,d3
  4793.  move.w d3,d4
  4794.  sub.w topclip,d3
  4795.  sub.w botclip,d4
  4796.  cmp.w d3,d1
  4797.  bge predontdrawfloor
  4798.  cmp.w d4,d7
  4799.  blt predontdrawfloor
  4800.  cmp.w d4,d1
  4801.  bge.s .nocliptoproof
  4802.  move.w d4,d1
  4803. .nocliptoproof
  4804.  cmp.w d3,d7
  4805.  blt doneclip
  4806.  move.w d3,d7
  4807.  bra doneclip
  4808.  
  4809. clipfloor:
  4810.  move.w botclip,d4
  4811.  sub.w #40,d4
  4812.  cmp.w d4,d1
  4813.  bge predontdrawfloor
  4814.  move.w topclip,d3
  4815.  sub.w #40,d3
  4816.  cmp.w d3,d1
  4817.  bge.s .nocliptopfloor
  4818.  move.w d3,d1
  4819. .nocliptopfloor 
  4820.  cmp.w d3,d7
  4821.  ble predontdrawfloor
  4822.  cmp.w d4,d7
  4823.  blt.s .noclipbotfloor
  4824.  move.w d4,d7
  4825. .noclipbotfloor:
  4826.  
  4827. doneclip:
  4828.  
  4829.  lea (a4,d1*2),a4
  4830. ; move.l #dists,a2
  4831.  move.w distaddr,d0
  4832.  muls #64,d0
  4833.  move.l d0,a2
  4834. ; muls #25,d0
  4835. ; adda.w d0,a2
  4836. ; lea (a2,d1*2),a2
  4837.  sub.w d1,d7
  4838.  ble predontdrawfloor 
  4839.  move.w d1,d0
  4840.  bne.s .notzero
  4841.  moveq #1,d0
  4842. .notzero
  4843.  muls linedir,d1
  4844.  add.l d1,a6
  4845.  move.l #floorscalecols,a1
  4846.  move.l LineToUse,a5
  4847.  
  4848.  tst.b gourfloor
  4849.  bne dogourfloor
  4850.  
  4851.  tst.b anyclipping
  4852.  beq dofloornoclip
  4853.  
  4854. dofloor:
  4855. ; move.w (a2)+,d0
  4856.  move.w leftclip(pc),d3
  4857.  move.w rightclip(pc),d4
  4858.  move.w rightsidetab-leftsidetab(a4),d2
  4859.  
  4860.  addq #1,d2
  4861.  cmp.w d3,d2
  4862.  ble.s nodrawline
  4863.  cmp.w d4,d2
  4864.  ble.s noclipright
  4865.  move.w d4,d2
  4866. noclipright:
  4867.  move.w (a4),d1
  4868.  cmp.w d4,d1
  4869.  bge.s nodrawline
  4870.  cmp.w d3,d1
  4871.  bge.s noclipleft
  4872.  move.w d3,d1
  4873. noclipleft:
  4874.  cmp.w d1,d2
  4875.  ble.s nodrawline
  4876.  
  4877.  move.w d1,leftedge
  4878.  move.w d2,rightedge
  4879.  
  4880. ; moveq #0,d1
  4881. ; moveq #0,d3
  4882. ; move.w leftbrighttab-leftsidetab(a4),d1
  4883. ; bge.s .okbl
  4884. ; moveq #0,d1
  4885. ;.okbl:
  4886.  
  4887. ; move.w rightbrighttab-leftsidetab(a4),d3
  4888. ; bge.s .okbr
  4889. ; moveq #0,d3
  4890. ;.okbr:
  4891.  
  4892. ; sub.w d1,d3
  4893. ; asl.w #8,d1
  4894. ; move.l d1,leftbright
  4895. ; swap d3
  4896. ; asr.l #5,d3
  4897. ; divs d5,d3
  4898. ; move.w d3,d5
  4899. ; muls.w d6,d5
  4900. ; asr.l #3,d5
  4901. ; clr.b d5
  4902. ; add.w d5,leftbright+2
  4903.  
  4904. ; ext.l d3
  4905. ; asl.l #5,d3
  4906. ; swap d3
  4907. ; asl.w #8,d3
  4908. ; move.l d3,brightspd
  4909.  
  4910.  move.l a6,a3
  4911.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  4912.  move.l a2,d7
  4913.  divs d0,d7
  4914.  move.w d7,d0
  4915.  jsr (a5)
  4916.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  4917. nodrawline
  4918.  adda.w linedir(pc),a6
  4919.  addq #2,a4
  4920.  addq #1,d0
  4921.  subq #1,d7
  4922.  bgt dofloor
  4923.  
  4924. predontdrawfloor
  4925.  move.l (a7)+,a0
  4926.  
  4927. dontdrawfloor:
  4928.  
  4929.  CACHE_FREEZE_OFF d2
  4930.  rts
  4931.  
  4932. anyclipping: dc.w 0
  4933.  
  4934. dofloornoclip:
  4935. ; move.w (a2)+,d0
  4936.  move.w rightsidetab-leftsidetab(a4),d2
  4937.  addq #1,d2
  4938.  move.w (a4)+,d1
  4939.  move.w d1,leftedge
  4940.  move.w d2,rightedge
  4941.  
  4942. ; sub.w d1,d2
  4943.  
  4944. ; moveq #0,d1
  4945. ; moveq #0,d3
  4946. ; move.w leftbrighttab-leftsidetab(a4),d1
  4947. ; bge.s .okbl
  4948. ; moveq #0,d1
  4949. ;.okbl:
  4950.  
  4951. ; move.w rightbrighttab-leftsidetab(a4),d3
  4952. ; bge.s .okbr
  4953. ; moveq #0,d3
  4954. ;.okbr:
  4955.  
  4956. ; sub.w d1,d3
  4957. ; asl.w #8,d1
  4958. ; move.l d1,leftbright
  4959. ; swap d3
  4960. ; asr.l #5,d3
  4961. ; divs d2,d3
  4962. ; ext.l d3
  4963. ; asl.l #5,d3
  4964. ; swap d3
  4965. ; asl.w #8,d3
  4966. ; move.l d3,brightspd
  4967.  
  4968.  move.l a6,a3
  4969.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  4970.  move.l a2,d7
  4971.  divs d0,d7
  4972.  move.w d7,d0
  4973.  jsr (a5)
  4974.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  4975.  adda.w linedir(pc),a6
  4976.  addq #1,d0
  4977.  subq #1,d7
  4978.  bgt dofloornoclip
  4979.  
  4980.  bra predontdrawfloor
  4981.  
  4982. dogourfloor:
  4983.  tst.b anyclipping
  4984.  beq dofloornoclipGOUR
  4985.  
  4986. dofloorGOUR:
  4987. ; move.w (a2)+,d0
  4988.  move.w leftclip(pc),d3
  4989.  move.w rightclip(pc),d4
  4990.  move.w rightsidetab-leftsidetab(a4),d2
  4991.  
  4992.  move.w d2,d5
  4993.  sub.w (a4),d5
  4994.  addq #1,d5
  4995.  moveq #0,d6
  4996.  
  4997.  addq #1,d2
  4998.  cmp.w d3,d2
  4999.  ble nodrawlineGOUR
  5000.  cmp.w d4,d2
  5001.  ble.s nocliprightGOUR
  5002.  move.w d4,d2
  5003. nocliprightGOUR:
  5004.  move.w (a4),d1
  5005.  cmp.w d4,d1
  5006.  bge nodrawlineGOUR
  5007.  cmp.w d3,d1
  5008.  bge.s noclipleftGOUR
  5009.  move.w d3,d6
  5010.  subq #1,d6
  5011.  sub.w d1,d6
  5012.  move.w d3,d1
  5013. noclipleftGOUR:
  5014.  cmp.w d1,d2
  5015.  ble nodrawlineGOUR
  5016.  
  5017.  move.w d1,leftedge
  5018.  move.w d2,rightedge
  5019.  
  5020.  move.l a2,d2
  5021.  divs d0,d2
  5022.  move.w d2,dst
  5023.  asr.w #7,d2
  5024. ; addq #5,d2
  5025. ; add.w lighttype,d2
  5026.  
  5027.  moveq #0,d1
  5028.  moveq #0,d3
  5029.  move.w leftbrighttab-leftsidetab(a4),d1
  5030.  add.w d2,d1
  5031.  bge.s .okbl
  5032.  moveq #0,d1
  5033. .okbl:
  5034.  asr.w #1,d1
  5035.  cmp.w #14,d1
  5036.  ble.s .okdl
  5037.  move.w #14,d1
  5038. .okdl:
  5039.  
  5040.  move.w rightbrighttab-leftsidetab(a4),d3
  5041.  add.w d2,d3
  5042.  bge.s .okbr
  5043.  moveq #0,d3
  5044. .okbr:
  5045.  asr.w #1,d3
  5046.  cmp.w #14,d3
  5047.  ble.s .okdr
  5048.  move.w #14,d3
  5049. .okdr:
  5050.  
  5051.  sub.w d1,d3
  5052.  asl.w #8,d1
  5053.  move.l d1,leftbright
  5054.  swap d3
  5055.  add.w #16,d3
  5056.  asr.l #5,d3
  5057.  divs d5,d3
  5058.  muls d3,d6
  5059.  add.w #256*7,d6
  5060.  asr.w #3,d6
  5061.  clr.b d6
  5062.  add.w d6,leftbright+2
  5063.  
  5064.  ext.l d3
  5065.  asl.l #5,d3
  5066.  swap d3
  5067.  asl.w #8,d3
  5068.  move.l d3,brightspd
  5069.  
  5070.  move.l a6,a3
  5071.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  5072.  move.w dst,d0
  5073.  lea floorscalecols,a1
  5074.  move.l floortile,a0
  5075.  adda.w whichtile,a0
  5076.  jsr pastfloorbright
  5077.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  5078. nodrawlineGOUR
  5079.  adda.w linedir(pc),a6
  5080.  addq #2,a4
  5081.  addq #1,d0
  5082.  subq #1,d7
  5083.  bgt dofloorGOUR
  5084.  
  5085. predontdrawfloorGOUR
  5086.  move.l (a7)+,a0
  5087.  
  5088. dontdrawfloorGOUR:
  5089.  
  5090.  CACHE_FREEZE_OFF d2
  5091.  rts
  5092.  
  5093. dofloornoclipGOUR:
  5094. ; move.w (a2)+,d0
  5095.  move.w rightsidetab-leftsidetab(a4),d2
  5096.  addq #1,d2
  5097.  move.w (a4),d1
  5098.  move.w d1,leftedge
  5099.  move.w d2,rightedge
  5100.  
  5101.  sub.w d1,d2
  5102.  
  5103.  move.l a2,d6
  5104.  divs d0,d6
  5105.  move.w d6,d5
  5106.  asr.w #7,d5
  5107. ; addq #5,d5
  5108. ; add.w lighttype,d5
  5109.  
  5110.  moveq #0,d1
  5111.  moveq #0,d3
  5112.  move.w leftbrighttab-leftsidetab(a4),d1
  5113.  add.w d5,d1
  5114.  bge.s .okbl
  5115.  moveq #0,d1
  5116. .okbl:
  5117.  asr.w #1,d1
  5118.  cmp.w #14,d1
  5119.  ble.s .okdl
  5120.  move.w #14,d1
  5121. .okdl:
  5122.  
  5123.  move.w rightbrighttab-leftsidetab(a4),d3
  5124.  add.w d5,d3
  5125.  bge.s .okbr
  5126.  moveq #0,d3
  5127. .okbr:
  5128.  asr.w #1,d3
  5129.  cmp.w #14,d3
  5130.  ble.s .okdr
  5131.  move.w #14,d3
  5132. .okdr:
  5133.  
  5134.  sub.w d1,d3
  5135.  asl.w #8,d1
  5136.  move.l d1,leftbright
  5137.  swap d3
  5138.  asr.l #5,d3
  5139.  divs d2,d3
  5140.  ext.l d3
  5141.  asl.l #5,d3
  5142.  swap d3
  5143.  asl.w #8,d3
  5144.  move.l d3,brightspd
  5145.  
  5146.  
  5147.  move.l a6,a3
  5148.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  5149.  move.w d6,d0
  5150.  move.w d0,dst
  5151.  lea floorscalecols,a1
  5152.  move.l floortile,a0
  5153.  adda.w whichtile,a0
  5154.  jsr pastfloorbright
  5155.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  5156.  adda.w linedir(pc),a6
  5157.  addq #2,a4
  5158.  addq #1,d0
  5159.  subq #1,d7
  5160.  bgt dofloornoclipGOUR
  5161.  
  5162.  bra predontdrawfloorGOUR
  5163.  
  5164.  
  5165.  
  5166. dists:
  5167. ; incbin "floordists"
  5168. drawit: dc.w 0
  5169.  
  5170. LineToUse: dc.l 0
  5171.  
  5172. ***************************
  5173. * Right then, time for the floor
  5174. * routine...
  5175. * For test purposes, give it
  5176. * a3 = point to screen
  5177. * d0= z distance away
  5178. * and sinval+cosval must be set up.
  5179. ***************************
  5180.  
  5181. leftedge: dc.w 0
  5182. rightedge: dc.w 0
  5183.  
  5184. rndpt: dc.l rndtab
  5185.  
  5186. WaterFloorLine:
  5187.  
  5188.  CACHE_OFF d2
  5189.  
  5190.  move.l rndpt,a2
  5191.  move.w (a2)+,d1
  5192.  move.w (a2)+,d2
  5193.  move.w (a2)+,d3
  5194.  cmp.l #endrnd-4,a2
  5195.  blt.s okrnd
  5196.  suba.w #98,a2
  5197. okrnd: 
  5198.  move.l a2,rndpt
  5199.  
  5200.  asr.w #7,d0
  5201.  move.w d0,d1
  5202.  move.w d0,d2
  5203.  move.w d0,d3
  5204.  move.l clipd(pc,d1.w*4),d1
  5205.  move.l clipd(pc,d2.w*4),d2
  5206.  move.l clipd(pc,d3.w*4),d3
  5207.  bra pcli
  5208.  
  5209.  dc.l 0
  5210. clipd:
  5211.  dc.l 0
  5212.  dc.l 512
  5213.  dc.l 512*2
  5214.  dc.l 512*3
  5215.  dc.l 512*4
  5216.  dc.l 512*5
  5217.  dc.l 512*6
  5218.  dc.l 512*7
  5219.  dc.l 512*8
  5220.  dc.l 512*9
  5221.  dc.l 512*10
  5222.  dc.l 512*11
  5223.  dc.l 512*12
  5224.  dc.l 512*13
  5225.  dc.l 512*14
  5226.  dc.l 512*15
  5227.  dc.l 512*15
  5228.  dc.l 512*15
  5229.  dc.l 512*15
  5230.  dc.l 512*15
  5231.  dc.l 512*15
  5232.  dc.l 512*15
  5233.  dc.l 512*15
  5234.  dc.l 512*15
  5235.  dc.l 512*15
  5236.  dc.l 512*15
  5237.  dc.l 512*15
  5238.  
  5239. pcli:
  5240.  
  5241.  move.l #brightentab,a2
  5242.  move.l a2,a4
  5243.  move.l a4,a5
  5244.  add.l d1,a2
  5245.  add.l d2,a4
  5246.  add.l d3,a5
  5247.  
  5248.  move.l #doacrossline,a1
  5249.  move.w leftedge(pc),d1
  5250.  move.w rightedge(pc),d2
  5251.  sub.w d1,d2
  5252.  move.w time(pc,d1.w*2),d1
  5253.  move.w time(pc,d2.w*2),d2
  5254.  lea (a1,d1.w),a1
  5255.  move.w (a1,d2.w),d4
  5256.  move.w #$4e75,(a1,d2.w)
  5257.  
  5258.  moveq #0,d0
  5259.  jsr (a1)
  5260.  move.w d4,(a1,d2.w)
  5261.  
  5262.  CACHE_ON d2
  5263.  
  5264.  rts
  5265.  
  5266. time:
  5267. val SET 0
  5268.  REPT 100
  5269.  dc.w val
  5270. val SET val+10
  5271.  ENDR
  5272.  
  5273. storeit: dc.l 0
  5274.  
  5275. doacrossline:
  5276. ; incbin "Doacrossline"
  5277.  rts
  5278.  
  5279. dst: dc.w 0
  5280.  
  5281. FloorLine:
  5282.  
  5283.  move.l floortile,a0
  5284.  adda.w whichtile,a0
  5285.  move.w lighttype,d1
  5286.  
  5287.  move.w d0,dst
  5288.  
  5289.  move.w d0,d2
  5290. *********************
  5291. * Old version
  5292.  asr.w #8,d2
  5293.  add.w #5,d1
  5294. *********************
  5295. ; asr.w #3,d2
  5296. ; sub.w #4,d2
  5297. ; cmp.w #6,d2
  5298. ; blt.s flbrbr
  5299. ; move.w #6,d2
  5300. ;flbrbr:
  5301. *********************
  5302.  add.w d2,d1
  5303.  bge.s .fixedbright
  5304.  moveq #0,d1
  5305. .fixedbright:
  5306.  cmp.w #28,d1
  5307.  ble.s .smallbright
  5308.  move.w #28,d1
  5309. .smallbright:
  5310.  lea floorscalecols,a1
  5311.  add.l floorbright(pc,d1.w*4),a1
  5312.  bra pastfloorbright
  5313.  
  5314. ConstCol: dc.w 0
  5315.  
  5316. BumpLine:
  5317.  
  5318.  tst.b smoothbumps
  5319.  beq.s Chunky
  5320.  
  5321.  move.l #SmoothTile,a0
  5322.  lea Smoothscalecols,a1
  5323.  bra pastast
  5324.  
  5325. Chunky:
  5326.  
  5327.  moveq #0,d2
  5328.  move.l #Bumptile,a0
  5329.  move.w whichtile,d2
  5330.  adda.w d2,a0
  5331.  ror.l #2,d2
  5332.  lsr.w #6,d2
  5333.  rol.l #2,d2
  5334.  and.w #15,d2
  5335.  move.l #ConstCols,a1
  5336.  move.w (a1,d2.w*2),ConstCol
  5337.  lea Bumpscalecols,a1
  5338.  
  5339. pastast:
  5340.  move.w lighttype,d1
  5341.  
  5342.  move.w d0,dst
  5343.  
  5344.  move.w d0,d2
  5345. *********************
  5346. * Old version
  5347.  asr.w #8,d2
  5348.  add.w #5,d1
  5349. *********************
  5350. ; asr.w #3,d2
  5351. ; sub.w #4,d2
  5352. ; cmp.w #6,d2
  5353. ; blt.s flbrbr
  5354. ; move.w #6,d2
  5355. ;flbrbr:
  5356. *********************
  5357.  add.w d2,d1
  5358.  bge.s .fixedbright
  5359.  moveq #0,d1
  5360. .fixedbright:
  5361.  cmp.w #28,d1
  5362.  ble.s .smallbright
  5363.  move.w #28,d1
  5364. .smallbright:
  5365.  add.l floorbright(pc,d1.w*4),a1
  5366.  bra pastfloorbright
  5367.  
  5368.  
  5369. floorbright:
  5370.  dc.l 512*0
  5371.  dc.l 512*1
  5372.  dc.l 512*1
  5373.  dc.l 512*2
  5374.  dc.l 512*2
  5375.  
  5376.  dc.l 512*3
  5377.  dc.l 512*3
  5378.  dc.l 512*4
  5379.  dc.l 512*4
  5380.  dc.l 512*5
  5381.  
  5382.  dc.l 512*5
  5383.  dc.l 512*6
  5384.  dc.l 512*6
  5385.  dc.l 512*7
  5386.  dc.l 512*7
  5387.  
  5388.  dc.l 512*8
  5389.  dc.l 512*8
  5390.  dc.l 512*9
  5391.  dc.l 512*9
  5392.  dc.l 512*10
  5393.  
  5394.  dc.l 512*10
  5395.  dc.l 512*11
  5396.  dc.l 512*11
  5397.  dc.l 512*12
  5398.  dc.l 512*12
  5399.  
  5400.  dc.l 512*13
  5401.  dc.l 512*13
  5402.  dc.l 512*14
  5403.  dc.l 512*14
  5404.  
  5405. widthleft: dc.w 0
  5406. scaleval: dc.w 0
  5407. sxoff: dc.l 0
  5408. szoff: dc.l 0
  5409. xoff34: dc.w 0
  5410. zoff34: dc.w 0
  5411. scosval: dc.w 0
  5412. ssinval: dc.w 0
  5413.  
  5414.  
  5415. floorsetbright:
  5416.  move.l #walltiles,a0
  5417.  
  5418. pastfloorbright
  5419.  
  5420.  
  5421.  move.w d0,d1
  5422.  muls cosval,d1    ; change in x across whole width
  5423.  move.w d0,d2
  5424.  muls sinval,d2    ; change in z across whole width
  5425.  neg.l d2
  5426. scaleprog:
  5427.  move.w scaleval(pc),d3
  5428.  beq.s .samescale
  5429.  bgt.s .scaledown
  5430.  neg.w d3
  5431.  asr.l d3,d1
  5432.  asr.l d3,d2
  5433.  bra.s .samescale
  5434. .scaledown:
  5435.  asl.l d3,d1
  5436.  asl.l d3,d2
  5437. .samescale
  5438.  
  5439.  move.l d1,d3 ;    z cos
  5440.  move.l d3,d6
  5441.  move.l d3,d5
  5442.  asr.l #1,d6
  5443.  add.l d6,d3
  5444.  asr.l #1,d3
  5445.  
  5446.  move.l d2,d4    ; z sin
  5447.  move.l d4,d6
  5448.  asr.l #1,d6
  5449.  add.l d4,d6
  5450.  add.l d3,d4
  5451.  neg.l d4    ; start x
  5452.  
  5453.  asr.l #1,d6    ; zsin/2
  5454.  sub.l d6,d5    ; start z
  5455.  
  5456.  add.l sxoff,d4
  5457.  add.l szoff,d5
  5458.  
  5459.  moveq #0,d6
  5460.  move.w leftedge(pc),d6
  5461.  beq.s nomultleft
  5462.  
  5463.  move.l d1,a4
  5464.  move.l d2,a5
  5465.  
  5466.  muls.l d6,d3:d1
  5467.  asr.l #6,d1
  5468.  add.l d1,d4
  5469.  
  5470.  muls.l d6,d3:d2
  5471.  asr.l #6,d2
  5472.  add.l d2,d5
  5473.  move.l a4,d1
  5474.  move.l a5,d2
  5475.  
  5476. nomultleft:
  5477.  
  5478.  move.w d4,startsmoothx
  5479.  move.w d5,startsmoothz
  5480.  
  5481.  swap d4
  5482.  asr.l #8,d5
  5483. ; add.w szoff,d5
  5484. ; add.w sxoff,d4
  5485.  and.w #63,d4
  5486.  and.w #63*256,d5
  5487.  move.b d4,d5
  5488.  
  5489.  asr.l #6,d1
  5490.  asr.l #6,d2
  5491.  move.w d1,a4
  5492.  move.w d2,a5
  5493.  asr.l #8,d2
  5494.  and.w #%0011111100000000,d2
  5495.  swap d1
  5496.  add.w d1,d2
  5497.  move.w #%11111100111111,d1
  5498.  and.w d1,d5
  5499.  swap d5
  5500.  move.w startsmoothz,d5
  5501.  swap d5
  5502.  swap d2
  5503.  move.w a5,d2
  5504.  swap d2
  5505.  
  5506. ***********************************
  5507.  
  5508.  move.w d6,a2
  5509.  move.l d2,d6
  5510.  add.w #256,d6
  5511.  
  5512.  moveq #0,d0
  5513.  
  5514.  tst.w a2
  5515.  beq startatleftedge
  5516.  
  5517.  move.w widthleft(pc),d4
  5518.  
  5519.  move.w rightedge(pc),d3
  5520.  
  5521.  cmp.w #31,a2
  5522.  bgt.s notinfirststrip
  5523.  lea (a3,a2.w*4),a3
  5524.  cmp.w #32,d3
  5525.  ble.s allinfirststrip
  5526.  move.w #32,d7
  5527.  sub.w d7,d3
  5528.  sub.w a2,d7
  5529.  bra intofirststrip
  5530.  
  5531. allinfirststrip
  5532.  sub.w a2,d3
  5533.  move.w d3,d7
  5534.  move.w #0,d4
  5535.  bra allintofirst
  5536.  
  5537. notinfirststrip:
  5538.  sub.w #32,a2
  5539.  sub.w #32,d3
  5540.  adda.w #33*4,a3
  5541.  cmp.w #31,a2
  5542.  bgt.s notstartinsec
  5543.  lea (a3,a2.w*4),a3
  5544.  cmp.w #32,d3
  5545.  ble.s allinsecstrip
  5546.  move.w #32,d7
  5547.  sub.w d7,d3
  5548.  sub.w a2,d7
  5549.  move.w d3,d4
  5550.  bra allintofirst
  5551.  
  5552. allinsecstrip
  5553.  sub.w a2,d3
  5554.  move.w d3,d7
  5555.  move.w #0,d4
  5556.  bra allintofirst
  5557.  rts
  5558.  
  5559. prot8: dc.w 0
  5560.  
  5561. notstartinsec:
  5562.  sub.w #32,a2
  5563.  sub.w #32,d3
  5564.  adda.w #33*4,a3
  5565.  lea (a3,a2.w*4),a3
  5566.  cmp.w #32,d3
  5567.  ble.s allinthirdstrip
  5568.  move.w #32,d7
  5569.  sub.w d7,d3
  5570.  sub.w a2,d7
  5571.  move.w d3,d4
  5572.  bra allintofirst
  5573.  rts
  5574.  
  5575. allinthirdstrip
  5576.  sub.w a2,d3
  5577.  move.w d3,d7
  5578.  move.w #0,d4
  5579.  bra allintofirst
  5580.  rts
  5581.  
  5582. startatleftedge:
  5583.  
  5584.  move.w rightedge(pc),d3
  5585.  sub.w a2,d3
  5586.  
  5587.  move.w d3,d7
  5588.  cmp.w #32,d7
  5589.  ble.s .notoowide
  5590.  move.w #32,d7
  5591. .notoowide:
  5592.  sub.w d7,d3
  5593. intofirststrip:
  5594.  
  5595.  move.w d3,d4
  5596. allintofirst:
  5597.  
  5598.  move.w startsmoothx,d3
  5599.  
  5600. tstwat:
  5601.  
  5602.  tst.b gourfloor
  5603.  bne gouraudfloor
  5604.  
  5605.  tst.b usewater
  5606.  bne texturedwater
  5607.  
  5608.  
  5609. ******************************
  5610. * BumpMap the floor/ceiling! *
  5611.  tst.b usebumps
  5612.  bne.s BumpMap
  5613. ******************************
  5614.  
  5615. ordinary:
  5616.  moveq #0,d0
  5617.  
  5618.  dbra d7,acrossscrn
  5619.  rts
  5620.  
  5621. usebumps: dc.w $0
  5622. smoothbumps: dc.w $0
  5623. gourfloor: dc.w 0
  5624.  
  5625.  include "ab3:source/bumpmap.s"
  5626.  
  5627.  CNOP 0,4
  5628. backbefore:
  5629.  and.w d1,d5
  5630.  move.b (a0,d5.w*4),d0
  5631.  add.w a4,d3
  5632.  move.w (a1,d0.w*2),(a3)
  5633.  addq #4,a3
  5634.  addx.l d6,d5
  5635.  dbcs d7,acrossscrn
  5636.  dbcc d7,backbefore
  5637.  bra.s past1
  5638.  
  5639. acrossscrn:
  5640.  and.w d1,d5
  5641.  move.b (a0,d5.w*4),d0
  5642.  add.w a4,d3
  5643.  move.w (a1,d0.w*2),(a3)
  5644.  addq #4,a3
  5645.  addx.l d2,d5
  5646.  dbcs d7,acrossscrn
  5647.  dbcc d7,backbefore
  5648. past1:
  5649.  bcc.s gotoacross
  5650.  
  5651.  move.w d4,d7
  5652.  bne.s .notdoneyet
  5653.  CACHE_FREEZE_ON d2
  5654.  rts
  5655. .notdoneyet:
  5656.  
  5657.  cmp.w #32,d7
  5658.  ble.s .notoowide
  5659.  move.w #32,d7
  5660. .notoowide
  5661.  sub.w d7,d4  
  5662.  addq #4,a3
  5663.  
  5664.  dbra d7,backbefore
  5665.  CACHE_FREEZE_ON d2
  5666.  rts
  5667.  
  5668.  
  5669. gotoacross:
  5670.  
  5671.  move.w d4,d7
  5672.  bne.s .notdoneyet
  5673.  CACHE_FREEZE_ON d2
  5674.  rts
  5675. .notdoneyet:
  5676.  
  5677.  cmp.w #32,d7
  5678.  ble.s .notoowide
  5679.  move.w #32,d7
  5680. .notoowide
  5681.  sub.w d7,d4  
  5682.  addq #4,a3
  5683.  
  5684.  dbra d7,acrossscrn
  5685.  CACHE_FREEZE_ON d2
  5686.  rts
  5687.  
  5688. leftbright: dc.l 0
  5689. brightspd: dc.l 0
  5690.  
  5691. gouraudfloor:
  5692.  move.l leftbright,d0
  5693.  move.l brightspd,d1
  5694.  dbra d7,acrossscrngour
  5695.  rts
  5696.  
  5697.  CNOP 0,4
  5698. backbeforegour:
  5699.  and.w #63*256+63,d5
  5700.  move.b (a0,d5.w*4),d0
  5701.  add.l d1,d0
  5702.  bcc.s .nomoreb
  5703.  add.w #256,d0
  5704. .nomoreb:
  5705.  add.w a4,d3
  5706.  move.w (a1,d0.w*2),(a3)
  5707.  addq #4,a3 
  5708.  addx.l d6,d5
  5709.  dbcs d7,acrossscrngour
  5710.  dbcc d7,backbeforegour
  5711.  bra.s past1gour
  5712.  
  5713. acrossscrngour:
  5714.  and.w #63*256+63,d5
  5715.  move.b (a0,d5.w*4),d0
  5716.  add.l d1,d0
  5717.  bcc.s .nomoreb
  5718.  add.w #256,d0
  5719. .nomoreb:
  5720.  add.w a4,d3
  5721.  move.w (a1,d0.w*2),(a3)
  5722.  addq #4,a3
  5723.  addx.l d2,d5
  5724.  dbcs d7,acrossscrngour
  5725.  dbcc d7,backbeforegour
  5726. past1gour:
  5727.  bcc.s gotoacrossgour
  5728.  
  5729.  move.w d4,d7
  5730.  bne.s .notdoneyet
  5731.  move.l d0,leftbright
  5732.  
  5733.  CACHE_FREEZE_ON d2
  5734.  rts
  5735. .notdoneyet:
  5736.  
  5737.  cmp.w #32,d7
  5738.  ble.s .notoowide
  5739.  move.w #32,d7
  5740. .notoowide
  5741.  sub.w d7,d4  
  5742.  addq #4,a3
  5743.  
  5744.  dbra d7,backbeforegour
  5745.  CACHE_FREEZE_ON d2
  5746.  rts
  5747.  
  5748.  
  5749. gotoacrossgour:
  5750.  
  5751.  move.w d4,d7
  5752.  bne.s .notdoneyet
  5753.  CACHE_FREEZE_ON d2
  5754.  rts
  5755. .notdoneyet:
  5756.  
  5757.  cmp.w #32,d7
  5758.  ble.s .notoowide
  5759.  move.w #32,d7
  5760. .notoowide
  5761.  sub.w d7,d4  
  5762.  addq #4,a3
  5763.  
  5764.  dbra d7,acrossscrngour
  5765.  CACHE_FREEZE_ON d2
  5766.  rts
  5767.  
  5768.  
  5769. waterpt: dc.l waterlist
  5770.  
  5771. waterlist:
  5772.  dc.l waterfile
  5773.  dc.l waterfile+2
  5774.  dc.l waterfile+256
  5775.  dc.l waterfile+256+2
  5776.  dc.l waterfile+512
  5777.  dc.l waterfile+512+2
  5778.  dc.l waterfile+768
  5779.  dc.l waterfile+768+2
  5780. ; dc.l waterfile+768
  5781. ; dc.l waterfile+512+2
  5782. ; dc.l waterfile+512
  5783. ; dc.l waterfile+256+2
  5784. ; dc.l waterfile+256
  5785. ; dc.l waterfile+2
  5786. endwaterlist:
  5787.  
  5788. watertouse: dc.l waterfile
  5789.  
  5790. wtan: dc.w 0
  5791. wateroff: dc.w 0
  5792.  
  5793. texturedwater:
  5794.  
  5795.  add.w wateroff,d5
  5796.  
  5797.  move.l #brightentab,a1
  5798.  move.w dst,d0
  5799.  clr.b d0
  5800.  add.w d0,d0
  5801.  adda.w d0,a1
  5802.  
  5803.  move.w dst,d0
  5804.  asl.w #7,d0
  5805.  add.w wtan,d0
  5806.  and.w #8191,d0
  5807.  move.l #SineTable,a0
  5808.  move.w (a0,d0.w),d0
  5809.  ext.l d0
  5810.  move.w dst,d3
  5811.  add.w #300,d3
  5812.  divs d3,d0
  5813.  asr.w #6,d0
  5814.  add.w #2,d0
  5815.  
  5816.  move.w dst,d3
  5817.  asr.w #7,d3
  5818.  add.w d3,d0
  5819.  
  5820.  muls #104*4,d0
  5821.  move.w d0,a6
  5822.  
  5823.  move.l watertouse,a0
  5824.  
  5825.  move.w startsmoothx,d3
  5826.  dbra d7,acrossscrnw
  5827.  rts
  5828.  
  5829. backbeforew:
  5830.  and.w d1,d5
  5831.  move.w (a0,d5.w*4),d0
  5832.  move.b 1(a3,a6.w),d0
  5833.  move.w (a1,d0.w*2),(a3)
  5834.  addq #4,a3
  5835.  add.w a4,d3
  5836.  addx.l d6,d5
  5837.  dbcs d7,acrossscrnw
  5838.  dbcc d7,backbeforew
  5839.  bcc.s past1w
  5840.  add.w #256,d5 
  5841.  bra.s past1w
  5842.  
  5843. acrossscrnw:
  5844.  and.w d1,d5
  5845.  move.w (a0,d5.w*4),d0
  5846.  move.b 1(a3,a6.w),d0
  5847.  move.w (a1,d0.w*2),(a3)
  5848.  addq #4,a3
  5849.  add.w a4,d3
  5850.  addx.l d2,d5
  5851.  dbcs d7,acrossscrnw
  5852.  dbcc d7,backbeforew
  5853.  bcc.s past1w
  5854.  add.w #256,d5 
  5855. past1w:
  5856.  
  5857.  move.w d4,d7
  5858.  bne.s .notdoneyet
  5859.  rts
  5860. .notdoneyet:
  5861.  
  5862.  cmp.w #32,d7
  5863.  ble.s .notoowide
  5864.  move.w #32,d7
  5865. .notoowide
  5866.  sub.w d7,d4  
  5867.  addq #4,a3
  5868.  
  5869.  dbra d7,acrossscrnw
  5870.  CACHE_FREEZE_ON d2
  5871.  rts
  5872.  
  5873. usewater: dc.w 0
  5874.  dc.w 0
  5875. startsmoothx: dc.w 0
  5876.  dc.w 0
  5877. startsmoothz: dc.w 0
  5878.  
  5879. ********************************
  5880. *
  5881.  include "AB3:source/ObjDraw3.chipram"
  5882. *
  5883. ********************************
  5884.  
  5885. numframes:
  5886.  dc.w 0
  5887.  
  5888. alframe: dc.l Objects+4096
  5889.  
  5890. alan:
  5891.  dcb.l 8,0
  5892.  dcb.l 8,1
  5893.  dcb.l 8,2
  5894.  dcb.l 8,3
  5895. endalan:
  5896.  
  5897. alanptr: dc.l alan
  5898.  
  5899. Time2: dc.l 0
  5900. dispco:
  5901.  dc.w 0
  5902.  
  5903. KInt_Init    ;VBR Assumed $0
  5904.         move.l $68.w,OLDKINT
  5905.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  5906.         And.b    #$3f,$bfe201        Set Timers
  5907.         Move.b    #$7f,$bfed01
  5908.         Move.b    $bfed01,d0
  5909.         Move.b    #$88,$bfed01
  5910.         St.b    KInt_CCode        
  5911.         Move.b    #$a0,$bfee01        Start Timey Thing
  5912.         Rts                And return
  5913.  
  5914. OLDKINT: dc.l 0
  5915.  
  5916.  
  5917. KInt_Main    
  5918.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  5919.         Move.w    #8,$dff09a        Temp Disable Int.
  5920.         Move.w    $dff01e,d0        Intreqr
  5921.         And.w    #8,d0            Mask Out All X^ K_Int
  5922.     Beq    KInt_End            Not Keyboard Interrupt
  5923.         Lea    $bfed01,a6
  5924.         Move.w    #$8,$dff09c        Clear Int.Request
  5925.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  5926.         Ror.b    #1,d0            Roll to correct
  5927.         Not.b    d0            
  5928.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  5929. .HandShake    Move.b    #8,(a6)
  5930.         Move.b    #7,-$900(a6)
  5931.         Move.b    #0,-$800(a6)
  5932.         Move.b    #0,-$100(a6)
  5933.         Move.b    #$d1,$100(a6)        
  5934.         Tst.b    (a6)    
  5935. .wait        Btst    #0,(a6)
  5936.     Beq.s    .wait
  5937.         Move.b    #$a0,$100(a6)        
  5938.         Move.b    (a6),d0        
  5939.         Move.b    #$88,(a6)
  5940.         Lea    KeyMap,a1
  5941.         Moveq.w    #0,d0
  5942.         Move.b    KInt_CCode(pc),d0
  5943.     Bmi.s    KInt_KeyUp            neg if up 
  5944.  
  5945. KInt_KeyDown
  5946.         st (a1,d0.w)
  5947.     Bra    KInt_End
  5948.  
  5949. KInt_KeyUp
  5950.         And.w    #$7f,d0            Make code Positive
  5951.         clr.b (a1,d0.w)
  5952. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  5953.     
  5954.         Move.w    #$8008,$dff09a        Re-enable Int.
  5955.         Rte
  5956.  
  5957. KInt_CCode    Ds.b    1
  5958. KInt_Askey    Ds.b    1
  5959. KInt_OCode    Ds.w    1
  5960.  
  5961.  
  5962. OldSpace: dc.b 0
  5963. SpaceTapped: dc.b 0
  5964. PLR1_SPCTAP: dc.b 0
  5965. PLR2_SPCTAP: dc.b 0
  5966. PLR1_Ducked: dc.b 0
  5967. PLR2_Ducked: dc.b 0
  5968.  even
  5969.  
  5970.  include "ab3:source/PLR1CONTROL.s"
  5971.  include "ab3:source/PLR2CONTROL.s"
  5972.  include "ab3:source/FALL.s"
  5973.  
  5974. prot7: dc.w 0
  5975.  
  5976. GOTTOSEND: dc.w 0
  5977.  
  5978. OtherInter:
  5979.  move.w #$0010,$dff000+intreq
  5980.  movem.l d0-d7/a0-a6,-(a7)
  5981.  bra.s justshake
  5982.  
  5983. Chan0inter:
  5984.  
  5985.  move.w #$0010,$dff000+intreq
  5986.  
  5987.  tst.b doanything
  5988.  bne.s dosomething
  5989.  rte
  5990.  
  5991. dosomething:
  5992.  
  5993.  
  5994.  addq.w #1,FramesToDraw
  5995.  movem.l d0-d7/a0-a6,-(a7)
  5996.  
  5997. ; jsr INITREC
  5998. ; jsr RECEIVE
  5999.  
  6000. ; tst.l BUFFER
  6001. ; beq.s justshake
  6002. ; st GOTTOSEND
  6003. ; move.l #OtherInter,$6c
  6004.  
  6005. justshake:
  6006.  
  6007.  cmp.b #'b',Prefsfile+3
  6008.  bne.s .noback
  6009.  jsr mt_music
  6010. .noback:
  6011.  
  6012.  bra dontshowtime
  6013.  
  6014.  tst.b oktodisplay
  6015.  beq dontshowtime
  6016.  clr.b oktodisplay
  6017.  subq.w #1,dispco
  6018.  bgt dontshowtime
  6019.  move.w #10,dispco
  6020.  
  6021.  move.l #TimerScr+10,a0
  6022.  move.l TimeCount,d0
  6023.  bge.s timenotneg
  6024.  move.l #1111*256,d0
  6025. timenotneg:
  6026.  asr.l #8,d0
  6027.  move.l #digits,a1
  6028.  move.w #7,d2
  6029. digitlop
  6030.  divs #10,d0
  6031.  swap d0
  6032.  lea (a1,d0.w*8),a2
  6033.  move.b (a2)+,(a0)
  6034.  move.b (a2)+,24(a0)
  6035.  move.b (a2)+,24*2(a0)
  6036.  move.b (a2)+,24*3(a0)
  6037.  move.b (a2)+,24*4(a0)
  6038.  move.b (a2)+,24*5(a0)
  6039.  move.b (a2)+,24*6(a0)
  6040.  move.b (a2)+,24*7(a0)
  6041.  subq #1,a0
  6042.  swap d0
  6043.  ext.l d0
  6044.  dbra d2,digitlop
  6045.  
  6046.  move.l #TimerScr+10+24*10,a0
  6047.  move.l NumTimes,d0
  6048.  move.l #digits,a1
  6049.  move.w #3,d2
  6050. digitlop2
  6051.  divs #10,d0
  6052.  swap d0
  6053.  lea (a1,d0.w*8),a2
  6054.  move.b (a2)+,(a0)
  6055.  move.b (a2)+,24(a0)
  6056.  move.b (a2)+,24*2(a0)
  6057.  move.b (a2)+,24*3(a0)
  6058.  move.b (a2)+,24*4(a0)
  6059.  move.b (a2)+,24*5(a0)
  6060.  move.b (a2)+,24*6(a0)
  6061.  move.b (a2)+,24*7(a0)
  6062.  subq #1,a0
  6063.  swap d0
  6064.  ext.l d0
  6065.  dbra d2,digitlop2
  6066.  
  6067.  move.l #TimerScr+10+24*20,a0
  6068.  moveq #0,d0
  6069.  move.w FramesToDraw,d0
  6070.  move.l #digits,a1
  6071.  move.w #2,d2
  6072. digitlop3
  6073.  divs #10,d0
  6074.  swap d0
  6075.  lea (a1,d0.w*8),a2
  6076.  move.b (a2)+,(a0)
  6077.  move.b (a2)+,24(a0)
  6078.  move.b (a2)+,24*2(a0)
  6079.  move.b (a2)+,24*3(a0)
  6080.  move.b (a2)+,24*4(a0)
  6081.  move.b (a2)+,24*5(a0)
  6082.  move.b (a2)+,24*6(a0)
  6083.  move.b (a2)+,24*7(a0)
  6084.  subq #1,a0
  6085.  swap d0
  6086.  ext.l d0
  6087.  dbra d2,digitlop3
  6088.  
  6089. dontshowtime:
  6090.  
  6091.  
  6092.  move.l alanptr,a0
  6093.  move.l (a0)+,alframe
  6094.  cmp.l #endalan,a0
  6095.  blt.s nostartalan
  6096.  move.l #alan,a0
  6097. nostartalan:
  6098.  move.l a0,alanptr
  6099.  
  6100.  
  6101.  tst.b READCONTROLS
  6102.  beq.s nocontrols
  6103.  
  6104.  cmp.b #'s',mors
  6105.  beq.s control2
  6106.  
  6107.  tst.b PLR1MOUSE
  6108.  beq.s PLR1_nomouse
  6109.  bsr PLR1_mouse_control
  6110. PLR1_nomouse:
  6111.  tst.b PLR1KEYS
  6112.  beq.s PLR1_nokeys
  6113.  bsr PLR1_keyboard_control
  6114. PLR1_nokeys:
  6115. ; tst.b PLR1PATH
  6116. ; beq.s PLR1_nopath
  6117. ; bsr PLR1_follow_path
  6118. ;PLR1_nopath:
  6119.  tst.b PLR1JOY
  6120.  beq.s PLR1_nojoy
  6121.  bsr PLR1_JoyStick_control
  6122. PLR1_nojoy: 
  6123.  bra.s nocontrols
  6124.  
  6125. control2:
  6126.  tst.b PLR2MOUSE
  6127.  beq.s PLR2_nomouse
  6128.  bsr PLR2_mouse_control
  6129. PLR2_nomouse:
  6130.  tst.b PLR2KEYS
  6131.  beq.s PLR2_nokeys
  6132.  bsr PLR2_keyboard_control
  6133. PLR2_nokeys:
  6134. ; tst.b PLR2PATH
  6135. ; beq.s PLR2_nopath
  6136. ; bsr PLR1_follow_path
  6137. ;PLR2_nopath:
  6138.  tst.b PLR2JOY
  6139.  beq.s PLR2_nojoy
  6140.  bsr PLR2_JoyStick_control
  6141. PLR2_nojoy: 
  6142.  
  6143.  
  6144. nocontrols:
  6145.  
  6146.  move.l #$dff000,a6
  6147.  
  6148.  cmp.b #'4',Prefsfile+1
  6149.  bne.s nomuckabout
  6150.  
  6151.  move.w #$0,d0 
  6152.  tst.b NoiseMade0LEFT
  6153.  beq.s noturnoff0
  6154.  move.w #1,d0
  6155. noturnoff0:
  6156.  tst.b NoiseMade0RIGHT
  6157.  beq.s noturnoff1
  6158.  or.w #2,d0
  6159. noturnoff1:
  6160.  tst.b NoiseMade1RIGHT
  6161.  beq.s noturnoff2
  6162.  or.w #4,d0
  6163. noturnoff2:
  6164.  tst.b NoiseMade1LEFT
  6165.  beq.s noturnoff3
  6166.  or.w #8,d0
  6167. noturnoff3:
  6168.  move.w d0,dmacon(a6)
  6169.  
  6170. nomuckabout:
  6171.  
  6172.  
  6173. ; tst.b PLR2_fire
  6174. ; beq.s firenotpressed2
  6175. ; fire was pressed last time.
  6176. ; btst #7,$bfe001
  6177. ; bne.s firenownotpressed2
  6178. ; fire is still pressed this time.
  6179. ; st PLR2_fire
  6180. ; bra dointer
  6181.  
  6182. firenownotpressed2:
  6183. ; fire has been released.
  6184. ; clr.b PLR2_fire
  6185. ; bra dointer
  6186.  
  6187. firenotpressed2
  6188.  
  6189. ; fire was not pressed last frame...
  6190.  
  6191. ; btst #7,$bfe001
  6192. ; if it has still not been pressed, go back above
  6193. ; bne.s firenownotpressed2
  6194. ; fire was not pressed last time, and was this time, so has
  6195. ; been clicked.
  6196. ; st PLR2_clicked
  6197. ; st PLR2_fire
  6198.  
  6199. dointer
  6200.  
  6201.  cmp.b #'4',Prefsfile+1
  6202.  beq fourchannel
  6203.  
  6204.  btst #1,$dff000+intreqr
  6205.  bne.s newsampbitl
  6206.  
  6207.  movem.l (a7)+,d0-d7/a0-a6
  6208.  
  6209.  rte
  6210.  
  6211.  
  6212. swappedem: dc.w 0
  6213.  
  6214. newsampbitl:
  6215.  
  6216.  move.w #$820f,$dff000+dmacon
  6217.  
  6218.  move.w #$200,$dff000+intreq
  6219.  
  6220. ; tst.b CHANNELDATA
  6221. ; bne nochannel0
  6222.  
  6223.  move.l pos0LEFT,a0
  6224.  move.l pos2LEFT,a1
  6225.  
  6226.  move.l #tab,a2
  6227.  
  6228.  moveq #0,d0
  6229.  moveq #0,d1
  6230.  move.b vol0left,d0
  6231.  move.b vol2left,d1
  6232.  cmp.b d1,d0
  6233.  slt swappedem
  6234.  bge.s fbig0
  6235.  
  6236. ; d1 is bigger so scale d0 and use d1
  6237. ; as audiochannel volume.
  6238.  
  6239.  exg a0,a1
  6240.  asl.w #6,d0
  6241.  divs d1,d0
  6242.  lsl.w #8,d0
  6243.  adda.w d0,a2
  6244.  move.w d1,$dff0a8
  6245.  bra.s donechan0
  6246.  
  6247. fbig0:
  6248.  tst.w d0
  6249.  beq.s donechan0
  6250.  asl.w #6,d1
  6251.  divs d0,d1
  6252.  lsl.w #8,d1
  6253.  adda.w d1,a2
  6254.  move.w d0,$dff0a8
  6255.  
  6256. donechan0:
  6257.  
  6258.  move.l Aupt0,a3
  6259.  move.l a3,$dff0a0
  6260.  move.l Auback0,Aupt0
  6261.  move.l a3,Auback0
  6262.  
  6263.  move.l Auback0,a3
  6264.  
  6265.  moveq #0,d0
  6266.  moveq #0,d1
  6267.  moveq #0,d2
  6268.  moveq #0,d3
  6269.  moveq #0,d4
  6270.  moveq #0,d5
  6271.  move.w #49,d7
  6272. loop:
  6273.  move.l (a0)+,d0
  6274.  move.b (a1)+,d1
  6275.  move.b (a1)+,d2
  6276.  move.b (a1)+,d3
  6277.  move.b (a1)+,d4
  6278.  move.b (a2,d3.w),d5
  6279.  swap d5
  6280.  move.b (a2,d1.w),d5
  6281.  asl.l #8,d5
  6282.  move.b (a2,d2.w),d5
  6283.  swap d5
  6284.  move.b (a2,d4.w),d5
  6285.  add.l d5,d0
  6286.  move.l d0,(a3)+
  6287.  dbra d7,loop
  6288.  
  6289.  tst.b swappedem
  6290.  beq.s .ok23
  6291.  exg a0,a1
  6292. .ok23:
  6293.  
  6294.  cmp.l Samp0endLEFT,a0
  6295.  blt.s .notoffendsamp1
  6296.  move.l SampleList+6*8,a0
  6297.  move.l SampleList+6*8+4,Samp0endLEFT
  6298.  move.b #63,vol0left
  6299.  st LEFTCHANDATA+1
  6300.  move.w #0,LEFTCHANDATA+2
  6301. .notoffendsamp1:
  6302.  
  6303.  cmp.l Samp2endLEFT,a1
  6304.  blt.s .notoffendsamp2
  6305.  move.l #empty,a1
  6306.  move.l #emptyend,Samp2endLEFT
  6307.  move.b #0,vol2left
  6308.  st LEFTCHANDATA+1+8
  6309.  move.w #0,LEFTCHANDATA+2+8
  6310. .notoffendsamp2:
  6311.  
  6312.  move.l a0,pos0LEFT
  6313.  move.l a1,pos2LEFT
  6314.  
  6315. nochannel0:
  6316.  
  6317.  tst.b CHANNELDATA+16
  6318.  bne nochannel1
  6319.  
  6320.  
  6321.  move.l pos0RIGHT,a0
  6322.  move.l pos2RIGHT,a1
  6323.  
  6324.  move.l Aupt1,a3
  6325.  move.l a3,$dff0b0
  6326.  move.l Auback1,Aupt1
  6327.  move.l a3,Auback1
  6328.  
  6329.  move.l #tab,a2
  6330.  
  6331.  moveq #0,d0
  6332.  moveq #0,d1
  6333.  move.b vol0right,d0
  6334.  move.b vol2right,d1
  6335.  cmp.b d1,d0
  6336.  slt swappedem
  6337.  bge.s fbig1
  6338.  
  6339. ; d1 is bigger so scale d0 and use d1
  6340. ; as audiochannel volume.
  6341.  
  6342.  exg a0,a1
  6343.  asl.w #6,d0
  6344.  divs d1,d0
  6345.  lsl.w #8,d0
  6346.  adda.w d0,a2
  6347.  move.w d1,$dff0b8
  6348.  bra.s donechan1
  6349.  
  6350. fbig1:
  6351.  tst.w d0
  6352.  beq.s donechan1
  6353.  asl.w #6,d1
  6354.  divs d0,d1
  6355.  lsl.w #8,d1
  6356.  adda.w d1,a2
  6357.  move.w d0,$dff0b8
  6358.  
  6359. donechan1:
  6360.  moveq #0,d0
  6361.  moveq #0,d1
  6362.  moveq #0,d2
  6363.  moveq #0,d3
  6364.  moveq #0,d4
  6365.  moveq #0,d5
  6366.  move.w #49,d7
  6367. loop2:
  6368.  move.l (a0)+,d0
  6369.  move.b (a1)+,d1
  6370.  move.b (a1)+,d2
  6371.  move.b (a1)+,d3
  6372.  move.b (a1)+,d4
  6373.  move.b (a2,d3.w),d5
  6374.  swap d5
  6375.  move.b (a2,d1.w),d5
  6376.  asl.l #8,d5
  6377.  move.b (a2,d2.w),d5
  6378.  swap d5
  6379.  move.b (a2,d4.w),d5
  6380.  add.l d5,d0
  6381.  move.l d0,(a3)+
  6382.  dbra d7,loop2
  6383.  
  6384.  tst.b swappedem
  6385.  beq.s ok01
  6386.  exg a0,a1
  6387. ok01:
  6388.  
  6389.  cmp.l Samp0endRIGHT,a0
  6390.  blt.s .notoffendsamp1
  6391.  move.l #empty,a0
  6392.  move.l #emptyend,Samp0endRIGHT
  6393.  move.b #0,vol0right
  6394.  st RIGHTCHANDATA+1
  6395.  move.w #0,RIGHTCHANDATA+2
  6396. .notoffendsamp1:
  6397.  
  6398.  cmp.l Samp2endRIGHT,a1
  6399.  blt.s .notoffendsamp2
  6400.  move.l #empty,a1
  6401.  move.l #emptyend,Samp2endRIGHT
  6402.  move.b #0,vol2right
  6403.  st RIGHTCHANDATA+1+8
  6404.  move.w #0,RIGHTCHANDATA+2+8
  6405. .notoffendsamp2:
  6406.  
  6407.  move.l a0,pos0RIGHT
  6408.  move.l a1,pos2RIGHT
  6409.  
  6410. nochannel1:
  6411.  
  6412. ******************* Other two channels
  6413.  
  6414.  move.l pos1LEFT,a0
  6415.  move.l pos3LEFT,a1
  6416.  
  6417.  move.l #tab,a2
  6418.  
  6419.  moveq #0,d0
  6420.  moveq #0,d1
  6421.  move.b vol1left,d0
  6422.  move.b vol3left,d1
  6423.  cmp.b d1,d0
  6424.  slt swappedem
  6425.  bge.s fbig2
  6426.  
  6427. ; d1 is bigger so scale d0 and use d1
  6428. ; as audiochannel volume.
  6429.  
  6430.  exg a0,a1
  6431.  asl.w #6,d0
  6432.  divs d1,d0
  6433.  lsl.w #8,d0
  6434.  adda.w d0,a2
  6435.  move.w d1,$dff0d8
  6436.  bra.s donechan2
  6437.  
  6438. fbig2:
  6439.  tst.w d0
  6440.  beq.s donechan2
  6441.  asl.w #6,d1
  6442.  divs d0,d1
  6443.  lsl.w #8,d1
  6444.  adda.w d1,a2
  6445.  move.w d0,$dff0d8
  6446.  
  6447. donechan2:
  6448.  
  6449.  move.l Aupt2,a3
  6450.  move.l a3,$dff0d0
  6451.  move.l Auback2,Aupt2
  6452.  move.l a3,Auback2
  6453.  
  6454.  moveq #0,d0
  6455.  moveq #0,d1
  6456.  moveq #0,d2
  6457.  moveq #0,d3
  6458.  moveq #0,d4
  6459.  moveq #0,d5
  6460.  move.w #49,d7
  6461. loop3:
  6462.  move.l (a0)+,d0
  6463.  move.b (a1)+,d1
  6464.  move.b (a1)+,d2
  6465.  move.b (a1)+,d3
  6466.  move.b (a1)+,d4
  6467.  move.b (a2,d3.w),d5
  6468.  swap d5
  6469.  move.b (a2,d1.w),d5
  6470.  asl.l #8,d5
  6471.  move.b (a2,d2.w),d5
  6472.  swap d5
  6473.  move.b (a2,d4.w),d5
  6474.  add.l d5,d0
  6475.  move.l d0,(a3)+
  6476.  dbra d7,loop3
  6477.  
  6478.  tst.b swappedem
  6479.  beq.s .ok23
  6480.  exg a0,a1
  6481. .ok23:
  6482.  
  6483.  cmp.l Samp1endLEFT,a0
  6484.  blt.s .notoffendsamp3
  6485.  move.l #empty,a0
  6486.  move.l #emptyend,Samp1endLEFT
  6487.  move.b #0,vol1left
  6488.  st LEFTCHANDATA+1+4
  6489.  move.w #0,LEFTCHANDATA+2+4
  6490. .notoffendsamp3:
  6491.  
  6492.  cmp.l Samp3endLEFT,a1
  6493.  blt.s .notoffendsamp4
  6494.  move.l #empty,a1
  6495.  move.l #emptyend,Samp3endLEFT
  6496.  move.b #0,vol3left
  6497.  st LEFTCHANDATA+1+12
  6498.  move.w #0,LEFTCHANDATA+2+12
  6499. .notoffendsamp4:
  6500.  
  6501.  move.l a0,pos1LEFT
  6502.  move.l a1,pos3LEFT
  6503.  
  6504.  move.l pos1RIGHT,a0
  6505.  move.l pos3RIGHT,a1
  6506.  
  6507.  move.l Aupt3,a3
  6508.  move.l a3,$dff0c0
  6509.  move.l Auback3,Aupt3
  6510.  move.l a3,Auback3
  6511.  
  6512.  move.l #tab,a2
  6513.  
  6514.  moveq #0,d0
  6515.  moveq #0,d1
  6516.  move.b vol1right,d0
  6517.  move.b vol3right,d1
  6518.  cmp.b d1,d0
  6519.  slt.s swappedem
  6520.  bge.s fbig3
  6521.  
  6522.  exg a0,a1
  6523.  asl.w #6,d0
  6524.  divs d1,d0
  6525.  lsl.w #8,d0
  6526.  adda.w d0,a2
  6527.  move.w d1,$dff0c8
  6528.  bra.s donechan3
  6529.  
  6530. fbig3:
  6531.  tst.w d0
  6532.  beq.s donechan3
  6533.  asl.w #6,d1
  6534.  divs d0,d1
  6535.  lsl.w #8,d1
  6536.  adda.w d1,a2
  6537.  move.w d0,$dff0c8
  6538. donechan3:
  6539.  
  6540.  moveq #0,d0
  6541.  moveq #0,d1
  6542.  moveq #0,d2
  6543.  moveq #0,d3
  6544.  moveq #0,d4
  6545.  moveq #0,d5
  6546.  move.w #49,d7
  6547. loop4:
  6548.  move.l (a0)+,d0
  6549.  move.b (a1)+,d1
  6550.  move.b (a1)+,d2
  6551.  move.b (a1)+,d3
  6552.  move.b (a1)+,d4
  6553.  move.b (a2,d3.w),d5
  6554.  swap d5
  6555.  move.b (a2,d1.w),d5
  6556.  asl.l #8,d5
  6557.  move.b (a2,d2.w),d5
  6558.  swap d5
  6559.  move.b (a2,d4.w),d5
  6560.  add.l d5,d0
  6561.  move.l d0,(a3)+
  6562.  dbra d7,loop4
  6563.  
  6564.  tst.b swappedem
  6565.  beq.s .ok23
  6566.  exg a0,a1
  6567. .ok23:
  6568.  
  6569.  cmp.l Samp1endRIGHT,a0
  6570.  blt.s notoffendsamp3
  6571.  move.l #empty,a0
  6572.  move.l #emptyend,Samp1endRIGHT
  6573.  move.b #0,vol1right
  6574.  st RIGHTCHANDATA+1+4
  6575.  move.w #0,RIGHTCHANDATA+2+4
  6576. notoffendsamp3:
  6577.  
  6578.  cmp.l Samp3endRIGHT,a1
  6579.  blt.s notoffendsamp4
  6580.  move.l #empty,a1
  6581.  move.l #emptyend,Samp3endRIGHT
  6582.  move.b #0,vol3right
  6583.  st RIGHTCHANDATA+1+12
  6584.  move.w #0,RIGHTCHANDATA+2+12
  6585. notoffendsamp4:
  6586.  
  6587.  move.l a0,pos1RIGHT
  6588.  move.l a1,pos3RIGHT
  6589.  
  6590.  movem.l (a7)+,d0-d7/a0-a6
  6591.  tst.b counting
  6592.  beq .nostartcounter
  6593.  JSR STARTCOUNT
  6594. .nostartcounter:
  6595.  
  6596.  rte
  6597.  
  6598. ***********************************
  6599. * 4 channel sound routine
  6600. ***********************************
  6601.  
  6602. fourchannel:
  6603.  
  6604.  move.l #$dff000,a6
  6605.  
  6606.  btst #7,intreqrl(a6)
  6607.  beq.s nofinish0
  6608. ; move.w #0,LEFTCHANDATA+2
  6609. ; st LEFTCHANDATA+1
  6610.  move.l #null,$a0(a6)
  6611.  move.w #100,$a4(a6) 
  6612.  move.w #$0080,intreq(a6)
  6613. nofinish0:
  6614.  
  6615.  tst.b NoiseMade0pLEFT
  6616.  beq.s NoChan0sound
  6617.  
  6618.  move.l Samp0endLEFT,d0
  6619.  move.l pos0LEFT,d1
  6620.  sub.l d1,d0
  6621.  lsr.l #1,d0
  6622.  move.w d0,$a4(a6)
  6623.  move.l d1,$a0(a6)
  6624.  move.w #$8201,dmacon(a6)
  6625.  moveq #0,d0
  6626.  move.b vol0left,d0
  6627.  move.w d0,$a8(a6)
  6628.  
  6629. NoChan0sound:
  6630.  
  6631. *****************************************
  6632. *****************************************
  6633.  
  6634.  btst #0,intreqr(a6)
  6635.  beq.s nofinish1
  6636.  move.l #null,$b0(a6)
  6637.  move.w #100,$b4(a6)
  6638.  move.w #$0100,intreq(a6)
  6639. nofinish1:
  6640.  
  6641.  tst.b NoiseMade0pRIGHT
  6642.  beq.s NoChan1sound
  6643.  
  6644.  move.l Samp0endRIGHT,d0
  6645.  move.l pos0RIGHT,d1
  6646.  sub.l d1,d0
  6647.  lsr.l #1,d0
  6648.  move.w d0,$b4(a6)
  6649.  move.l d1,$b0(a6)
  6650.  move.w d0,playnull1
  6651.  move.w #$8202,dmacon(a6)
  6652.  moveq #0,d0
  6653.  move.b vol0right,d0
  6654.  move.w d0,$b8(a6)
  6655.  
  6656. NoChan1sound:
  6657.  
  6658. *****************************************
  6659. *****************************************
  6660.  
  6661.  btst #1,intreqr(a6)
  6662.  beq.s nofinish2
  6663.  move.l #null,$c0(a6)
  6664.  move.w #100,$c4(a6)
  6665.  move.w #$0200,intreq(a6)
  6666. nofinish2:
  6667.  
  6668.  tst.b NoiseMade1pRIGHT
  6669.  beq.s NoChan2sound
  6670.  
  6671.  move.l Samp1endRIGHT,d0
  6672.  move.l pos1RIGHT,d1
  6673.  sub.l d1,d0
  6674.  lsr.l #1,d0
  6675.  move.w d0,$c4(a6)
  6676.  move.w d0,playnull2
  6677.  
  6678.  move.l d1,$c0(a6)
  6679.  move.w #$8204,dmacon(a6)
  6680.  moveq #0,d0
  6681.  move.b vol1right,d0
  6682.  move.w d0,$c8(a6)
  6683.  
  6684. NoChan2sound:
  6685.  
  6686. *****************************************
  6687. *****************************************
  6688.  
  6689.  btst #2,intreqr(a6)
  6690.  beq.s nofinish3
  6691.  move.l #null,$d0(a6)
  6692.  move.w #100,$d4(a6)
  6693.  move.w #$0400,intreq(a6)
  6694. nofinish3:
  6695.  
  6696.  tst.b NoiseMade1pLEFT
  6697.  beq.s NoChan3sound
  6698.  
  6699.  move.l Samp1endLEFT,d0
  6700.  move.l pos1LEFT,d1
  6701.  sub.l d1,d0
  6702.  lsr.l #1,d0
  6703.  move.w d0,$d4(a6)
  6704.  move.w d0,playnull3
  6705.  move.l d1,$d0(a6)
  6706.  move.w #$8208,dmacon(a6)
  6707.  moveq #0,d0
  6708.  move.b vol1left,d0
  6709.  move.w d0,$d8(a6)
  6710.  
  6711. NoChan3sound:
  6712.  
  6713. nomorechannels:
  6714.  
  6715.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  6716.  move.l #0,NoiseMade0LEFT
  6717.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  6718.  move.l #0,NoiseMade0RIGHT
  6719.  
  6720.  
  6721. ; tst.b playnull0
  6722. ; beq.s .nnul
  6723. ; sub.b #1,playnull0
  6724. ; bra.s chan0still
  6725. ;.nnul:
  6726. ;chan0still:
  6727.  
  6728.  tst.b NoiseMade0pLEFT
  6729.  bne.s chan0still
  6730.  tst.w playnull0
  6731.  beq.s nnul0
  6732.  sub.w #100,playnull0
  6733.  bra.s chan0still
  6734. nnul0:
  6735.  move.w #0,LEFTCHANDATA+2
  6736.  st LEFTCHANDATA+1
  6737. chan0still:
  6738.  
  6739.  tst.b NoiseMade0pRIGHT
  6740.  bne.s chan1still
  6741.  tst.w playnull1
  6742.  beq.s nnul1
  6743.  sub.w #100,playnull1
  6744.  bra.s chan1still
  6745. nnul1:
  6746.  move.w #0,RIGHTCHANDATA+2
  6747.  st RIGHTCHANDATA+1
  6748. chan1still:
  6749.  
  6750.  tst.b NoiseMade1pRIGHT
  6751.  bne.s chan2still
  6752.  tst.w playnull2
  6753.  beq.s nnul2
  6754.  sub.w #100,playnull2
  6755.  bra.s chan2still
  6756. nnul2:
  6757.  move.w #0,RIGHTCHANDATA+2+4
  6758.  st RIGHTCHANDATA+1+4
  6759. chan2still:
  6760.  
  6761.  tst.b NoiseMade1pLEFT
  6762.  bne.s chan3still
  6763.  tst.w playnull3
  6764.  beq.s nnul3
  6765.  sub.w #100,playnull3
  6766.  bra.s chan3still
  6767. nnul3:
  6768.  move.w #0,LEFTCHANDATA+2+4
  6769.  st LEFTCHANDATA+1+4
  6770.  
  6771. chan3still:
  6772.  
  6773.  
  6774.  movem.l (a7)+,d0-d7/a0-a6
  6775.  tst.b counting
  6776.  beq .nostartcounter
  6777.  JSR STARTCOUNT
  6778. .nostartcounter:
  6779.  
  6780.  rte
  6781.  
  6782. backbeat: dc.w 0
  6783.  
  6784. playnull0: dc.w 0
  6785. playnull1: dc.w 0
  6786. playnull2: dc.w 0
  6787. playnull3: dc.w 0
  6788.  
  6789. Samp0endRIGHT: dc.l emptyend
  6790. Samp1endRIGHT: dc.l emptyend
  6791. Samp2endRIGHT: dc.l emptyend
  6792. Samp3endRIGHT: dc.l emptyend
  6793. Samp0endLEFT: dc.l emptyend
  6794. Samp1endLEFT: dc.l emptyend
  6795. Samp2endLEFT: dc.l emptyend
  6796. Samp3endLEFT: dc.l emptyend
  6797.  
  6798. Aupt0: dc.l null
  6799. Auback0: dc.l null+500
  6800. Aupt2: dc.l null3
  6801. Auback2: dc.l null3+500
  6802. Aupt3: dc.l null4
  6803. Auback3: dc.l null4+500
  6804. Aupt1: dc.l null2
  6805. Auback1: dc.l null2+500
  6806.  
  6807. NoiseMade0LEFT: dc.b 0
  6808. NoiseMade1LEFT: dc.b 0
  6809. NoiseMade2LEFT: dc.b 0
  6810. NoiseMade3LEFT: dc.b 0
  6811. NoiseMade0pLEFT: dc.b 0
  6812. NoiseMade1pLEFT: dc.b 0
  6813. NoiseMade2pLEFT: dc.b 0
  6814. NoiseMade3pLEFT: dc.b 0
  6815. NoiseMade0RIGHT: dc.b 0
  6816. NoiseMade1RIGHT: dc.b 0
  6817. NoiseMade2RIGHT: dc.b 0
  6818. NoiseMade3RIGHT: dc.b 0
  6819. NoiseMade0pRIGHT: dc.b 0
  6820. NoiseMade1pRIGHT: dc.b 0
  6821. NoiseMade2pRIGHT: dc.b 0
  6822. NoiseMade3pRIGHT: dc.b 0
  6823.  
  6824. empty: ds.l 100
  6825. emptyend:
  6826.  
  6827. **************************************
  6828. * I want a routine to calculate all the
  6829. * info needed for the sound player to
  6830. * work, given say position of noise, volume
  6831. * and sample number.
  6832.  
  6833. Samplenum: dc.w 0
  6834. Noisex: dc.w 0
  6835. Noisez: dc.w 0
  6836. Noisevol: dc.w 0
  6837. chanpick: dc.w 0
  6838. IDNUM: dc.w 0
  6839. needleft: dc.b 0
  6840. needright: dc.b 0
  6841. STEREO: dc.b $0
  6842. even
  6843. prot6: dc.w 0
  6844.  
  6845.  even
  6846.  
  6847. CHANNELDATA:
  6848. LEFTCHANDATA:
  6849.  dc.l $00000000
  6850.  dc.l $00000000
  6851.  dc.l $FF000000
  6852.  dc.l $FF000000
  6853. RIGHTCHANDATA:
  6854.  dc.l $00000000
  6855.  dc.l $00000000
  6856.  dc.l $FF000000
  6857.  dc.l $FF000000
  6858.  
  6859. RIGHTPLAYEDTAB: ds.l 20
  6860. LEFTPLAYEDTAB: ds.l 20
  6861.  
  6862. MakeSomeNoise:
  6863.  
  6864. ; Plan for new sound handler:
  6865. ; It is sent a sample number,
  6866. ; a position relative to the
  6867. ; player, an id number and a volume.
  6868. ; Also notifplaying.
  6869.  
  6870. ; indirect inputs are the available
  6871. ; channel flags and whether or not
  6872. ; stereo sound is selected.
  6873.  
  6874. ; the algorithm must decide
  6875. ; whether the new sound is more
  6876. ; important than the ones already
  6877. ; playing. Thus an 'importance'
  6878. ; must be calculated, probably
  6879. ; using volume.
  6880.  
  6881. ; The output needs to be:
  6882.  
  6883. ; Write the pointers and volumes of
  6884. ; the sound channels
  6885.  
  6886.  
  6887.  tst.b notifplaying
  6888.  beq.s dontworry
  6889.  
  6890. ; find if we are already playing
  6891.  
  6892.  move.b IDNUM,d0
  6893.  move.w #7,d1
  6894.  lea CHANNELDATA,a3
  6895. findsameasme
  6896.  tst.b (a3)
  6897.  bne.s notavail
  6898.  cmp.b 1(a3),d0
  6899.  beq SameAsMe
  6900. notavail:
  6901.  add.w #4,a3
  6902.  dbra d1,findsameasme
  6903.  bra dontworry
  6904. SameAsMe
  6905.  rts
  6906.  
  6907. dontworry:
  6908.  
  6909. ; Ok its fine for us to play a sound.
  6910. ; So calculate left/right volume.
  6911.  
  6912.  move.w Noisex,d1
  6913.  muls d1,d1
  6914.  move.w Noisez,d2
  6915.  muls d2,d2
  6916.  move.w #64,d3
  6917.  moveq #1,d0
  6918.  add.l d1,d2
  6919.  beq pastcalc
  6920.  
  6921.  move.w #31,d0
  6922. .findhigh
  6923.  btst d0,d2
  6924.  bne .foundhigh
  6925.  dbra d0,.findhigh
  6926. .foundhigh
  6927.  asr.w #1,d0
  6928.  clr.l d3
  6929.  bset d0,d3
  6930.  move.l d3,d0
  6931.  
  6932.  move.w d0,d3
  6933.  muls d3,d3    ; x*x
  6934.  sub.l d2,d3    ; x*x-a
  6935.  asr.l #1,d3    ; (x*x-a)/2
  6936.  divs d0,d3    ; (x*x-a)/2x
  6937.  sub.w d3,d0    ; second approx
  6938.  bgt .stillnot0
  6939.  move.w #1,d0
  6940. .stillnot0
  6941.  
  6942.  move.w d0,d3
  6943.  muls d3,d3
  6944.  sub.l d2,d3
  6945.  asr.l #1,d3
  6946.  divs d0,d3
  6947.  sub.w d3,d0    ; second approx
  6948.  bgt .stillnot02
  6949.  move.w #1,d0
  6950. .stillnot02
  6951.  
  6952.  move.w #64,d3
  6953.  muls Noisevol,d3
  6954.  asr.w #1,d0
  6955.  addq #1,d0
  6956.  divs d0,d3
  6957.  
  6958.  cmp.w #64,d3
  6959.  ble.s notooloud
  6960.  move.w #64,d3
  6961. notooloud:
  6962.  
  6963. pastcalc:
  6964.  
  6965.     ; d3 contains volume of noise.
  6966.     
  6967.  move.w d3,d4
  6968.  
  6969.  move.w d3,d2
  6970.  muls Noisex,d2
  6971.  add.w d0,d0
  6972.  divs d0,d2
  6973.  
  6974.  bgt.s quietleft
  6975.  add.w d2,d4
  6976.  bge.s donequiet
  6977.  move.w #0,d4
  6978.  bra.s donequiet
  6979. quietleft:
  6980.  sub.w d2,d3
  6981.  bge.s donequiet
  6982.  move.w #0,d3
  6983. donequiet:
  6984.  
  6985. ; d3=leftvol?
  6986. ; d4=rightvol?
  6987.  
  6988.  clr.w needleft
  6989.  
  6990.  cmp.b d3,d4
  6991.  bgt.s RightLouder
  6992.  
  6993. ; Left is louder; is it MUCH louder?
  6994.  
  6995.  st needleft
  6996.  move.w d3,d2
  6997.  sub.w d4,d2
  6998.  cmp.w #32,d2
  6999.  slt needright
  7000.  bra aboutsame
  7001.  
  7002. RightLouder:
  7003.  st needright
  7004.  move.w d4,d2
  7005.  sub.w d3,d2
  7006.  cmp.w #32,d2
  7007.  slt needleft
  7008.  
  7009. aboutsame:
  7010.  
  7011.  tst.b STEREO
  7012.  beq NOSTEREO
  7013.  
  7014. ; Find least important sound on left
  7015.  
  7016.  move.l #0,a2
  7017.  move.l #0,d5
  7018.  move.w #10000,d2
  7019.  move.b IDNUM,d0
  7020.  lea LEFTCHANDATA,a3
  7021.  move.w #3,d1
  7022. FindLeftChannel
  7023.  tst.b (a3)
  7024.  bne.s .notactive
  7025.  cmp.b 1(a3),d0
  7026.  beq.s FOUNDLEFT
  7027.  cmp.w 2(a3),d2
  7028.  blt.s .notactive
  7029.  move.w 2(a3),d2
  7030.  move.l a3,a2
  7031.  move.w d5,d6
  7032.  
  7033. .notactive:
  7034.  add.w #4,a3
  7035.  add.w #1,d5
  7036.  dbra d1,FindLeftChannel
  7037.  move.l a2,a3
  7038.  bra.s gopastleft
  7039. FOUNDLEFT:
  7040.  move.w d5,d6
  7041. gopastleft:
  7042.  tst.l a3
  7043.  bne.s FOUNDALEFT
  7044.  rts
  7045. FOUNDALEFT:
  7046.  
  7047. ; d6 = channel number
  7048.  move.b d0,1(a3)
  7049.  move.w d3,2(a3)
  7050.  
  7051.  move.w Samplenum,d5
  7052.  move.l #SampleList,a3
  7053.  move.l (a3,d5.w*8),a1
  7054.  move.l 4(a3,d5.w*8),a2
  7055.  
  7056.  tst.b d6
  7057.  seq NoiseMade0LEFT
  7058.  beq.s .chan0
  7059.  cmp.b #2,d6
  7060.  slt NoiseMade1LEFT
  7061.  blt .chan1
  7062.  seq NoiseMade2LEFT
  7063.  beq .chan2
  7064.  st NoiseMade3LEFT
  7065.  
  7066.  move.b d5,LEFTPLAYEDTAB+9
  7067.  move.b d3,LEFTPLAYEDTAB+1+9
  7068.  move.b d4,LEFTPLAYEDTAB+2+9
  7069.  move.b d3,vol3left
  7070.  move.l a1,pos3LEFT
  7071.  move.l a2,Samp3endLEFT
  7072.  bra dorightchan
  7073.  
  7074. .chan0: 
  7075.  move.b d5,LEFTPLAYEDTAB
  7076.  move.b d3,LEFTPLAYEDTAB+1
  7077.  move.b d4,LEFTPLAYEDTAB+2
  7078.  move.l a1,pos0LEFT
  7079.  move.l a2,Samp0endLEFT
  7080.  move.b d3,vol0left
  7081.  bra dorightchan
  7082.  
  7083. .chan1:
  7084.  move.b d5,LEFTPLAYEDTAB+3
  7085.  move.b d3,LEFTPLAYEDTAB+1+3
  7086.  move.b d4,LEFTPLAYEDTAB+2+3
  7087.  move.b d3,vol1left
  7088.  move.l a1,pos1LEFT
  7089.  move.l a2,Samp1endLEFT
  7090.  bra dorightchan
  7091.  
  7092. .chan2: 
  7093.  move.b d5,LEFTPLAYEDTAB+6
  7094.  move.b d3,LEFTPLAYEDTAB+1+6
  7095.  move.b d4,LEFTPLAYEDTAB+2+6
  7096.  move.l a1,pos2LEFT
  7097.  move.l a2,Samp2endLEFT
  7098.  move.b d3,vol2left
  7099.  
  7100. dorightchan:
  7101.  
  7102. ; Find least important sound on right
  7103.  
  7104.  move.l #0,a2
  7105.  move.l #0,d5
  7106.  move.w #10000,d2
  7107.  move.b IDNUM,d0
  7108.  lea RIGHTCHANDATA,a3
  7109.  move.w #3,d1
  7110. FindRightChannel
  7111.  tst.b (a3)
  7112.  bne.s .notactive
  7113.  cmp.b 1(a3),d0
  7114.  beq.s FOUNDRIGHT
  7115.  cmp.w 2(a3),d2
  7116.  blt.s .notactive
  7117.  move.w 2(a3),d2
  7118.  move.l a3,a2
  7119.  move.w d5,d6
  7120.  
  7121. .notactive:
  7122.  add.w #4,a3
  7123.  add.w #1,d5
  7124.  dbra d1,FindRightChannel
  7125.  move.l a2,a3
  7126.  bra.s gopastright
  7127. FOUNDRIGHT:
  7128.  move.w d5,d6
  7129. gopastright:
  7130.  tst.l a3
  7131.  bne.s FOUNDARIGHT
  7132.  rts
  7133. FOUNDARIGHT:
  7134.  
  7135. ; d6 = channel number
  7136.  move.b d0,1(a3)
  7137.  move.w d3,2(a3)
  7138.  
  7139.  move.w Samplenum,d5
  7140.  move.l #SampleList,a3
  7141.  move.l (a3,d5.w*8),a1
  7142.  move.l 4(a3,d5.w*8),a2
  7143.  
  7144.  tst.b d6
  7145.  seq NoiseMade0RIGHT
  7146.  beq.s .chan0
  7147.  cmp.b #2,d6
  7148.  slt NoiseMade1RIGHT
  7149.  blt .chan1
  7150.  seq NoiseMade2RIGHT
  7151.  beq .chan2
  7152.  st NoiseMade3RIGHT
  7153.  
  7154.  move.b d5,RIGHTPLAYEDTAB+9
  7155.  move.b d3,RIGHTPLAYEDTAB+1+9
  7156.  move.b d4,RIGHTPLAYEDTAB+2+9
  7157.  move.b d4,vol3right
  7158.  move.l a1,pos3RIGHT
  7159.  move.l a2,Samp3endRIGHT
  7160.  rts
  7161.  
  7162. .chan0: 
  7163.  move.b d5,RIGHTPLAYEDTAB
  7164.  move.b d3,RIGHTPLAYEDTAB+1
  7165.  move.b d4,RIGHTPLAYEDTAB+2
  7166.  move.l a1,pos0RIGHT
  7167.  move.l a2,Samp0endRIGHT
  7168.  move.b d4,vol0right
  7169.  rts
  7170.  
  7171. .chan1:
  7172.  move.b d5,RIGHTPLAYEDTAB+3
  7173.  move.b d3,RIGHTPLAYEDTAB+1+3
  7174.  move.b d4,RIGHTPLAYEDTAB+2+3
  7175.  move.b d3,vol1right
  7176.  move.l a1,pos1RIGHT
  7177.  move.l a2,Samp1endRIGHT
  7178.  rts
  7179.  
  7180. .chan2: 
  7181.  move.b d5,RIGHTPLAYEDTAB+6
  7182.  move.b d3,RIGHTPLAYEDTAB+1+6
  7183.  move.b d4,RIGHTPLAYEDTAB+2+6
  7184.  move.l a1,pos2RIGHT
  7185.  move.l a2,Samp2endRIGHT
  7186.  move.b d3,vol2right
  7187.  rts
  7188.  
  7189. NOSTEREO:
  7190.  move.l #0,a2
  7191.  move.l #0,d5
  7192.  move.w #10000,d2
  7193.  move.b IDNUM,d0
  7194.  lea CHANNELDATA,a3
  7195.  move.w #7,d1
  7196. FindChannel
  7197.  tst.b (a3)
  7198.  bne.s .notactive
  7199.  cmp.b 1(a3),d0
  7200.  beq.s FOUNDCHAN
  7201.  cmp.w 2(a3),d2
  7202.  blt.s .notactive
  7203.  move.w 2(a3),d2
  7204.  move.l a3,a2
  7205.  move.w d5,d6
  7206.  
  7207. .notactive:
  7208.  add.w #4,a3
  7209.  add.w #1,d5
  7210.  dbra d1,FindChannel
  7211.  move.l a2,a3
  7212.  bra.s gopastchan
  7213. FOUNDCHAN:
  7214.  move.w d5,d6
  7215. gopastchan:
  7216.  tst.l a3
  7217.  bne.s FOUNDACHAN
  7218. tooquiet:
  7219.  rts
  7220. FOUNDACHAN:
  7221.  
  7222. ; d6 = channel number
  7223.  
  7224.  cmp.w d2,d3
  7225.  blt.s tooquiet
  7226.  
  7227.  move.b d0,1(a3)
  7228.  move.w d3,2(a3)
  7229.  
  7230.  move.w Samplenum,d5
  7231.  move.l #SampleList,a3
  7232.  move.l (a3,d5.w*8),a1
  7233.  move.l 4(a3,d5.w*8),a2
  7234.  
  7235.  tst.b d6
  7236.  seq NoiseMade0LEFT
  7237.  beq .chan0
  7238.  cmp.b #2,d6
  7239.  slt NoiseMade1LEFT
  7240.  blt .chan1
  7241.  seq NoiseMade2LEFT
  7242.  beq .chan2
  7243.  cmp.b #4,d6
  7244.  slt NoiseMade3LEFT
  7245.  blt .chan3
  7246.  seq NoiseMade0RIGHT
  7247.  beq .chan4
  7248.  cmp.b #6,d6
  7249.  slt NoiseMade1RIGHT
  7250.  blt .chan5
  7251.  seq NoiseMade2RIGHT
  7252.  beq .chan6
  7253.  st NoiseMade3RIGHT
  7254.  
  7255.  move.b d5,RIGHTPLAYEDTAB+9
  7256.  move.b d3,RIGHTPLAYEDTAB+1+9
  7257.  move.b d4,RIGHTPLAYEDTAB+2+9
  7258.  move.b d4,vol3right
  7259.  move.l a1,pos3RIGHT
  7260.  move.l a2,Samp3endRIGHT
  7261.  rts
  7262.  
  7263. .chan3:
  7264.  move.b d5,LEFTPLAYEDTAB+9
  7265.  move.b d3,LEFTPLAYEDTAB+1+9
  7266.  move.b d4,LEFTPLAYEDTAB+2+9
  7267.  move.b d3,vol3left
  7268.  move.l a1,pos3LEFT
  7269.  move.l a2,Samp3endLEFT
  7270.  bra dorightchan
  7271.  
  7272. .chan0: 
  7273.  move.b d5,LEFTPLAYEDTAB
  7274.  move.b d3,LEFTPLAYEDTAB+1
  7275.  move.b d4,LEFTPLAYEDTAB+2
  7276.  move.l a1,pos0LEFT
  7277.  move.l a2,Samp0endLEFT
  7278.  move.b d3,vol0left
  7279.  rts
  7280.  
  7281. .chan1:
  7282.  move.b d5,LEFTPLAYEDTAB+3
  7283.  move.b d3,LEFTPLAYEDTAB+1+3
  7284.  move.b d4,LEFTPLAYEDTAB+2+3
  7285.  move.b d3,vol1left
  7286.  move.l a1,pos1LEFT
  7287.  move.l a2,Samp1endLEFT
  7288.  rts
  7289.  
  7290. .chan2: 
  7291.  move.b d5,LEFTPLAYEDTAB+6
  7292.  move.b d3,LEFTPLAYEDTAB+1+6
  7293.  move.b d4,LEFTPLAYEDTAB+2+6
  7294.  move.l a1,pos2LEFT
  7295.  move.l a2,Samp2endLEFT
  7296.  move.b d3,vol2left
  7297.  rts
  7298.  
  7299. .chan4: 
  7300.  move.b d5,RIGHTPLAYEDTAB
  7301.  move.b d3,RIGHTPLAYEDTAB+1
  7302.  move.b d4,RIGHTPLAYEDTAB+2
  7303.  move.l a1,pos0RIGHT
  7304.  move.l a2,Samp0endRIGHT
  7305.  move.b d4,vol0right
  7306.  rts
  7307.  
  7308. .chan5:
  7309.  move.b d5,RIGHTPLAYEDTAB+3
  7310.  move.b d3,RIGHTPLAYEDTAB+1+3
  7311.  move.b d4,RIGHTPLAYEDTAB+2+3
  7312.  move.b d3,vol1right
  7313.  move.l a1,pos1RIGHT
  7314.  move.l a2,Samp1endRIGHT
  7315.  rts
  7316.  
  7317. .chan6: 
  7318.  move.b d5,RIGHTPLAYEDTAB+6
  7319.  move.b d3,RIGHTPLAYEDTAB+1+6
  7320.  move.b d4,RIGHTPLAYEDTAB+2+6
  7321.  move.l a1,pos2RIGHT
  7322.  move.l a2,Samp2endRIGHT
  7323.  move.b d3,vol2right
  7324.  rts
  7325.  
  7326. SampleList:
  7327.  dc.l Scream,EndScream
  7328.  dc.l Shoot,EndShoot
  7329.  dc.l Munch,EndMunch
  7330.  dc.l PooGun,EndPooGun
  7331.  dc.l Collect,EndCollect
  7332. ;5
  7333.  dc.l DoorNoise,EndDoorNoise
  7334.  dc.l 0,0
  7335.  dc.l Stomp,EndStomp
  7336.  dc.l LowScream,EndLowScream
  7337.  dc.l BaddieGun,EndBaddieGun
  7338. ;10
  7339.  dc.l SwitchNoise,EndSwitch
  7340.  dc.l Reload,EndReload
  7341.  dc.l NoAmmo,EndNoAmmo
  7342.  dc.l Splotch,EndSplotch
  7343.  dc.l SplatPop,EndSplatPop
  7344. ;15
  7345.  dc.l Boom,EndBoom
  7346.  dc.l Hiss,EndHiss
  7347.  dc.l Howl1,EndHowl1
  7348.  dc.l Howl2,EndHowl2
  7349.  dc.l Pant,EndPant
  7350. ;20
  7351.  dc.l Whoosh,EndWhoosh
  7352.  dc.l ROAR,EndROAR
  7353.  dc.l whoosh,Endwhoosh
  7354.  dc.l 0,0
  7355.  dc.l 0,0
  7356.  dc.l 0,0
  7357.  dc.l 0,0
  7358.  ds.l 40
  7359.  
  7360.  include "ab3:source/wallchunk.s"
  7361.  include "ab3:source/loadfromdisk.s"
  7362.  include "ab3:source/screensetup.s"
  7363.  include "ab3:source/CONTROLLOOP.s"
  7364.  
  7365. saveinters:  
  7366.  dc.w 0
  7367.  
  7368. z: dc.w 10
  7369.  
  7370. notifplaying:
  7371.  dc.w 0
  7372.  
  7373. audpos1: dc.w 0
  7374. audpos1b: dc.w 0
  7375. audpos2: dc.w 0
  7376. audpos2b: dc.w 0
  7377. audpos3: dc.w 0
  7378. audpos3b: dc.w 0
  7379. audpos4: dc.w 0
  7380. audpos4b: dc.w 0
  7381.  
  7382. vol0left: dc.w 0
  7383. vol0right: dc.w 0
  7384. vol1left: dc.w 0
  7385. vol1right: dc.w 0
  7386. vol2left: dc.w 0
  7387. vol2right: dc.w 0
  7388. vol3left: dc.w 0
  7389. vol3right: dc.w 0
  7390.  
  7391. pos: dc.l 0
  7392.  
  7393. pos0LEFT: dc.l empty
  7394. pos1LEFT: dc.l empty
  7395. pos2LEFT: dc.l empty
  7396. pos3LEFT: dc.l empty
  7397. pos0RIGHT: dc.l empty
  7398. pos1RIGHT: dc.l empty
  7399. pos2RIGHT: dc.l empty
  7400. pos3RIGHT: dc.l empty
  7401.  
  7402. numtodo dc.w 0
  7403.  
  7404. npt: dc.w 0
  7405.  
  7406. pretab:
  7407. val SET 0
  7408.  REPT 128
  7409.  dc.b val
  7410. val SET val+1
  7411.  ENDR
  7412. val SET -128
  7413.  REPT 128
  7414.  dc.b val
  7415. val SET val+1
  7416.  ENDR 
  7417.  
  7418. tab:
  7419.  ds.b 256*65
  7420.  
  7421.  
  7422. test: dc.l 0
  7423.  ds.l 30
  7424.  
  7425.  even
  7426. ConstCols:
  7427. ; incbin "ConstCols"
  7428.  even
  7429. Smoothscalecols:
  7430. ; incbin "smoothbumppalscaled"
  7431.  even
  7432. SmoothTile:
  7433. ; incbin "smoothbumptile"
  7434.  even
  7435. Bumpscalecols:
  7436. ; incbin "Bumppalscaled"
  7437.  even
  7438. Bumptile:
  7439. ; incbin "bumptile"
  7440.  even
  7441. scalecols: ;incbin "bytepixpalscaled"
  7442.  even
  7443. floorscalecols:
  7444.  incbin "floorpalscaled"
  7445.  ds.w 256*4
  7446.  
  7447.  even
  7448. PaletteAddr: dc.l 0
  7449. ChunkAddr: dc.l 0
  7450. ;walltiles:
  7451. ; dc.l GreenMechanicWALL
  7452. ; dc.l BlueGreyMetalWALL
  7453. ; dc.l TechnoDetailWALL
  7454. ; dc.l BlueStoneWALL
  7455. ; dc.l RedAlertWALL
  7456. ; dc.l RockWALL
  7457. ;
  7458. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  7459. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  7460. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  7461. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  7462. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  7463. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  7464.  
  7465. floortile:
  7466.  dc.l 0
  7467. ; incbin "floortile" 
  7468.  even
  7469. wallrouts:
  7470. ; incbin "2x2WallDraw" 
  7471.  CNOP 0,64
  7472. BackPicture:
  7473.  incbin "backfile"
  7474. EndBackPicture:
  7475.  
  7476. drawpt: dc.l 0
  7477. olddrawpt: dc.l 0
  7478. frompt: dc.l 0 
  7479.  
  7480. SineTable:
  7481.  incbin "bigsine"
  7482.  
  7483. angpos: dc.w 0
  7484. angspd: dc.w 0
  7485. flooryoff: dc.w 0
  7486. xoff: dc.l 0
  7487. yoff: dc.l 0
  7488. yvel: dc.l 0
  7489. zoff: dc.l 0
  7490. tyoff: dc.l 0
  7491. xspdval: dc.l 0
  7492. zspdval: dc.l 0
  7493. Zone: dc.w 0
  7494.  
  7495. PLR1: dc.b $ff
  7496.  even
  7497. PLR1_energy: dc.w 191
  7498. PLR1_GunSelected: dc.w 0
  7499. PLR1_cosval: dc.w 0
  7500. PLR1_sinval: dc.w 0
  7501. PLR1_angpos: dc.w 0
  7502. PLR1_angspd: dc.w 0
  7503. PLR1_xoff: dc.l 0
  7504. PLR1_yoff: dc.l 0
  7505. PLR1_yvel: dc.l 0
  7506. PLR1_zoff: dc.l 0
  7507. PLR1_tyoff: dc.l 0
  7508. PLR1_xspdval: dc.l 0
  7509. PLR1_zspdval: dc.l 0
  7510. PLR1_Zone: dc.w 0
  7511. PLR1_Roompt: dc.l 0
  7512. PLR1_OldRoompt: dc.l 0
  7513. PLR1_PointsToRotatePtr: dc.l 0
  7514. PLR1_ListOfGraphRooms: dc.l 0
  7515. PLR1_oldxoff: dc.l 0
  7516. PLR1_oldzoff: dc.l 0
  7517. PLR1_StoodInTop: dc.b 0
  7518.  even
  7519. PLR1_height: dc.l 0
  7520.  
  7521.  ds.w 4
  7522.  
  7523. PLR1s_cosval: dc.w 0
  7524. PLR1s_sinval: dc.w 0
  7525. PLR1s_angpos: dc.w 0
  7526. PLR1s_angspd: dc.w 0
  7527. PLR1s_xoff: dc.l 0
  7528. PLR1s_yoff: dc.l 0
  7529. PLR1s_yvel: dc.l 0
  7530. PLR1s_zoff: dc.l 0
  7531. PLR1s_tyoff: dc.l 0
  7532. PLR1s_xspdval: dc.l 0
  7533. PLR1s_zspdval: dc.l 0
  7534. PLR1s_Zone: dc.w 0
  7535. PLR1s_Roompt: dc.l 0
  7536. PLR1s_OldRoompt: dc.l 0
  7537. PLR1s_PointsToRotatePtr: dc.l 0
  7538. PLR1s_ListOfGraphRooms: dc.l 0
  7539. PLR1s_oldxoff: dc.l 0
  7540. PLR1s_oldzoff: dc.l 0
  7541. PLR1s_height: dc.l 0
  7542. PLR1s_targheight: dc.l 0
  7543.  
  7544. p1_xoff: dc.l 0
  7545. p1_zoff: dc.l 0
  7546. p1_yoff: dc.l 0
  7547. p1_height: dc.l 0
  7548. p1_angpos: dc.w 0
  7549. p1_bobble: dc.w 0
  7550. p1_clicked: dc.b 0
  7551. p1_spctap: dc.b 0
  7552. p1_ducked: dc.b 0
  7553. p1_gunselected: dc.b 0
  7554. p1_fire: dc.b 0
  7555.  even
  7556. p1_holddown: dc.w 0
  7557.  
  7558.  ds.w 4
  7559.  
  7560. PLR2: dc.b $ff
  7561.  even
  7562. PLR2_GunSelected: dc.w 0
  7563. PLR2_energy: dc.w 191
  7564. PLR2_cosval: dc.w 0
  7565. PLR2_sinval: dc.w 0
  7566. PLR2_angpos: dc.w 0
  7567. PLR2_angspd: dc.w 0
  7568. PLR2_xoff: dc.l 0
  7569. PLR2_yoff: dc.l 0
  7570. PLR2_yvel: dc.l 0
  7571. PLR2_zoff: dc.l 0
  7572. PLR2_tyoff: dc.l 0
  7573. PLR2_xspdval: dc.l 0
  7574. PLR2_zspdval: dc.l 0
  7575. PLR2_Zone: dc.w 0
  7576. PLR2_Roompt: dc.l 0
  7577. PLR2_OldRoompt: dc.l 0
  7578. PLR2_PointsToRotatePtr: dc.l 0
  7579. PLR2_ListOfGraphRooms: dc.l 0
  7580. PLR2_oldxoff: dc.l 0
  7581. PLR2_oldzoff: dc.l 0
  7582. PLR2_StoodInTop: dc.b 0
  7583.  even
  7584. PLR2_height: dc.l 0
  7585.  
  7586.  ds.w 4
  7587.  
  7588. PLR2s_cosval: dc.w 0
  7589. PLR2s_sinval: dc.w 0
  7590. PLR2s_angpos: dc.w 0
  7591. PLR2s_angspd: dc.w 0
  7592. PLR2s_xoff: dc.l 0
  7593. PLR2s_yoff: dc.l 0
  7594. PLR2s_yvel: dc.l 0
  7595. PLR2s_zoff: dc.l 0
  7596. PLR2s_tyoff: dc.l 0
  7597. PLR2s_xspdval: dc.l 0
  7598. PLR2s_zspdval: dc.l 0
  7599. PLR2s_Zone: dc.w 0
  7600. PLR2s_Roompt: dc.l 0
  7601. PLR2s_OldRoompt: dc.l 0
  7602. PLR2s_PointsToRotatePtr: dc.l 0
  7603. PLR2s_ListOfGraphRooms: dc.l 0
  7604. PLR2s_oldxoff: dc.l 0
  7605. PLR2s_oldzoff: dc.l 0
  7606. PLR2s_height: dc.l 0
  7607. PLR2s_targheight: dc.l 0
  7608.  
  7609.  ds.w 4
  7610.  
  7611. p2_xoff: dc.l 0
  7612. p2_zoff: dc.l 0
  7613. p2_yoff: dc.l 0
  7614. p2_height: dc.l 0
  7615. p2_angpos: dc.w 0
  7616. p2_bobble: dc.w 0
  7617. p2_clicked: dc.b 0
  7618. p2_spctap: dc.b 0
  7619. p2_ducked: dc.b 0
  7620. p2_gunselected: dc.b 0
  7621. p2_fire: dc.b 0
  7622.  even
  7623. p2_holddown: dc.w 0
  7624.  
  7625.  
  7626. liftanimtab:
  7627.  
  7628.  
  7629. endliftanimtab:
  7630.  
  7631. glassball:
  7632. ; incbin "glassball.inc"
  7633. endglass
  7634. glassballpt: dc.l glassball
  7635.  
  7636. rndtab: ; incbin "randfile"
  7637. endrnd: 
  7638.  
  7639. brightanimtab:
  7640.  dcb.w 200,20
  7641.  dc.w 5
  7642.  dc.w 10,20
  7643.  dc.w 5
  7644.  dcb.w 30,20
  7645.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  7646.  dcb.w 40,0
  7647.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  7648.  dcb.w 300,0
  7649.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  7650.  dc.w -1
  7651.  
  7652. Roompt: dc.l 0
  7653. OldRoompt: dc.l 0
  7654.  
  7655. *****************************************************************
  7656.  *
  7657.  include "AB3:source/LevelData2"
  7658.  *
  7659. *****************************************************************
  7660.  
  7661.  
  7662. wallpt: dc.l 0
  7663. floorpt: dc.l 0
  7664.  
  7665. Rotated:
  7666.  ds.l 2000 
  7667. ObjRotated:
  7668.  ds.l 2000
  7669.  
  7670. OnScreen:
  7671.  ds.l 2000 
  7672.  
  7673. startwait: dc.w 0
  7674. endwait: dc.w 0
  7675.  
  7676. Faces:; incbin "faces2raw"
  7677.  
  7678. *******************************************************************
  7679.  
  7680. consttab:
  7681.  incbin "constantfile"
  7682.  
  7683. *******************************************************************
  7684.  
  7685. darkentab: incbin "darkenedcols"
  7686. brightentab: incbin "brightenfile"
  7687. WorkSpace:
  7688.  ds.l 8192 
  7689. waterfile: incbin "waterfile"
  7690.  
  7691.  SECTION ffff,CODE_C
  7692.  
  7693. nullspr: dc.l 0
  7694.  
  7695.  cnop 0,8
  7696. borders:
  7697.  incbin "leftbord"
  7698.  incbin "rightbord"
  7699.  
  7700. health: incbin "healthstrip"
  7701. Ammunition: incbin "ammostrip"
  7702. healthpal: incbin "healthpal"
  7703. PanelKeys: incbin "greenkey"
  7704.  incbin "redkey"
  7705.  incbin "yellowkey"
  7706.  incbin "bluekey"
  7707.  
  7708. null: ds.w 500
  7709. null2: ds.w 500
  7710. null3: ds.w 500
  7711. null4: ds.w 500
  7712.  
  7713.  
  7714. Blurbfield:
  7715.  
  7716.  dc.w bpl1ptl
  7717. bl1l: dc.w 0
  7718.  dc.w bpl1pth
  7719. bl1h: dc.w 0
  7720.  
  7721.  dc.w diwstart,$2c81
  7722.  dc.w diwstop,$1cc1
  7723.  dc.w ddfstart,$38
  7724.  dc.w ddfstop,$b8
  7725.  dc.w bplcon0,$9201
  7726.  dc.w bplcon1,0
  7727.  dc.w $106,$c40
  7728. blcols:
  7729.  dc.w col0,0
  7730.  dc.w col1,$fff
  7731.  
  7732.  dc.w $108,0
  7733.  dc.w $10a,0
  7734.  
  7735.  dc.w $ffff,$fffe
  7736.  dc.w $ffff,$fffe
  7737.  
  7738. nullline:
  7739.  ds.b 80    
  7740.  
  7741.  include "ab3:source/titlecop.s"
  7742.  
  7743. bigfield:    
  7744.                 ; Start of our copper list.
  7745.  
  7746.  dc.w dmacon,$8020
  7747.  dc.w intreq,$8011
  7748.  dc.w $1fc,$f
  7749.  dc.w diwstart
  7750. winstart: dc.w $2cb1
  7751.  dc.w diwstop
  7752. winstop: dc.w $2c91
  7753.  dc.w ddfstart
  7754. fetchstart: dc.w $48
  7755.  dc.w ddfstop
  7756. fetchstop: dc.w $88
  7757.  
  7758. bordercols:
  7759.  incbin "borderpal"
  7760.  
  7761.  dc.w spr0ptl
  7762. s0l:
  7763.  dc.w 0
  7764.  dc.w spr0pth
  7765. s0h:
  7766.  dc.w 0
  7767.  dc.w spr1ptl
  7768. s1l:
  7769.  dc.w 0
  7770.  dc.w spr1pth
  7771. s1h:
  7772.  dc.w 0
  7773.  dc.w spr2ptl
  7774. s2l:
  7775.  dc.w 0
  7776.  dc.w spr2pth
  7777. s2h:
  7778.  dc.w 0
  7779.  dc.w spr3ptl
  7780. s3l:
  7781.  dc.w 0
  7782.  dc.w spr3pth
  7783. s3h:
  7784.  dc.w 0
  7785.  dc.w spr4ptl
  7786. s4l:
  7787.  dc.w 0
  7788.  dc.w spr4pth
  7789. s4h:
  7790.  dc.w 0
  7791.  dc.w spr5ptl
  7792. s5l:
  7793.  dc.w 0
  7794.  dc.w spr5pth
  7795. s5h:
  7796.  dc.w 0
  7797.  dc.w spr6ptl
  7798. s6l:
  7799.  dc.w 0
  7800.  dc.w spr6pth
  7801. s6h:
  7802.  dc.w 0
  7803.  dc.w spr7ptl
  7804. s7l:
  7805.  dc.w 0
  7806.  dc.w spr7pth
  7807. s7h:
  7808.  dc.w 0
  7809.  
  7810.  
  7811.  dc.w $106,$c42
  7812.  incbin "borderpal"
  7813.  
  7814.  dc.w $106,$8c42
  7815.  dc.w col0
  7816. hitcol: dc.w $0
  7817.  dc.w $106,$c42
  7818.  dc.w col0
  7819. hitcol2: dc.w 0
  7820.  
  7821.  dc.w bplcon0,$7201
  7822.  dc.w bplcon1
  7823. smoff:
  7824.  dc.w $0
  7825.  
  7826.  dc.w $108
  7827. modulo: dc.w -24
  7828.  dc.w $10a,-24
  7829.  
  7830.  dc.w bpl1pth
  7831. pl1h
  7832.  dc.w 0
  7833.  
  7834.  dc.w bpl1ptl
  7835. pl1l
  7836.  dc.w 0
  7837.  
  7838.  dc.w bpl2pth
  7839. pl2h
  7840.  dc.w 0
  7841.  
  7842.  dc.w bpl2ptl
  7843. pl2l
  7844.  dc.w 0
  7845.  
  7846.  dc.w bpl3pth
  7847. pl3h
  7848.  dc.w 0
  7849.  
  7850.  dc.w bpl3ptl
  7851. pl3l
  7852.  dc.w 0
  7853.  
  7854.  dc.w bpl4pth
  7855. pl4h
  7856.  dc.w 0
  7857.  
  7858.  dc.w bpl4ptl
  7859. pl4l
  7860.  dc.w 0
  7861.  
  7862.  dc.w bpl5pth
  7863. pl5h
  7864.  dc.w 0
  7865.  
  7866.  dc.w bpl5ptl
  7867. pl5l
  7868.  dc.w 0
  7869.  
  7870.  dc.w bpl6pth
  7871. pl6h
  7872.  dc.w 0
  7873.  
  7874.  dc.w bpl6ptl
  7875. pl6l
  7876.  dc.w 0
  7877.  
  7878.  dc.w bpl7pth
  7879. pl7h
  7880.  dc.w 0
  7881.  
  7882.  dc.w bpl7ptl
  7883. pl7l
  7884.  dc.w 0
  7885.  
  7886.  
  7887.  dc.w $1001,$ff00
  7888.  dc.w intreq,$11
  7889. yposcop:
  7890.  dc.w $2a11,$fffe
  7891.  dc.w $8a,0
  7892.  
  7893. ; ds.l 104*12
  7894.  
  7895. ;colbars:
  7896. ;val SET $2a
  7897. ; dcb.l 104*80,$1fe0000
  7898. ; dc.w $106,$c42
  7899. ; dc.w $80
  7900. ;pch1:
  7901. ; dc.w 0
  7902. ; dc.w $82
  7903. ;pcl1:
  7904. ; dc.w 0 
  7905. ; dc.w $88,0
  7906. ; dc.w $ffff,$fffe       ; End copper list.
  7907.  
  7908. ; ds.l 104*12
  7909.  
  7910. ;colbars2:
  7911. ;val SET $2a
  7912. ; dcb.l 104*80,$1fe0000
  7913. ; dc.w $106,$c42
  7914. ; dc.w $80
  7915. ;pch2:
  7916. ; dc.w 0
  7917. ; dc.w $82
  7918. ;pcl2:
  7919. ; dc.w 0
  7920. ; dc.w $88,0
  7921. ; dc.w $ffff,$fffe       ; End copper list.
  7922.  
  7923. ; ds.l 104*10
  7924.  
  7925. NullCopper:
  7926.  dc.w $ffff,$fffe
  7927.  
  7928. old: dc.l 0
  7929.  
  7930. prot5: dc.w 0
  7931. PanelCop:
  7932.  
  7933.  dc.w $80
  7934. och:
  7935.  dc.w 0
  7936.  dc.w $82
  7937. ocl:
  7938.  dc.w 0
  7939.  
  7940. statskip:
  7941.  dc.w $1fe,0
  7942.  dc.w $1fe,0
  7943.  
  7944.  dc.w $10c,0
  7945.  dc.w bplcon0,$1201
  7946.  dc.w bpl1ptl
  7947. n1l:
  7948.  dc.w 0
  7949.  dc.w bpl1pth
  7950. n1h:
  7951.  dc.w 0
  7952.  dc.w $108,-24
  7953.  incbin "Panelpal"
  7954.  
  7955.  dc.w bpl2pth
  7956. p2h
  7957.  dc.w 0
  7958.  
  7959.  dc.w bpl2ptl
  7960. p2l
  7961.  dc.w 0
  7962.  
  7963.  dc.w bpl3pth
  7964. p3h
  7965.  dc.w 0
  7966.  
  7967.  dc.w bpl3ptl
  7968. p3l
  7969.  dc.w 0
  7970.  
  7971.  dc.w bpl4pth
  7972. p4h
  7973.  dc.w 0
  7974.  dc.w bpl4ptl
  7975. p4l
  7976.  dc.w 0
  7977.  dc.w bpl5pth
  7978. p5h
  7979.  dc.w 0
  7980.  dc.w bpl5ptl
  7981. p5l
  7982.  dc.w 0
  7983.  dc.w bpl6pth
  7984. p6h
  7985.  dc.w 0
  7986.  dc.w bpl6ptl
  7987. p6l
  7988.  dc.w 0
  7989.  dc.w bpl7pth
  7990. p7h
  7991.  dc.w 0
  7992.  dc.w bpl7ptl
  7993. p7l
  7994.  dc.w 0
  7995.  dc.w bpl8pth
  7996. p8h
  7997.  dc.w 0
  7998.  dc.w bpl8ptl
  7999. p8l
  8000.  dc.w 0
  8001.  
  8002.  
  8003.  dc.w ddfstart,$38
  8004.  dc.w ddfstop,$b8
  8005.  dc.w diwstart,$2c81
  8006.  dc.w diwstop,$2cc1
  8007.  
  8008.  dc.w bplcon0
  8009. Panelcon: dc.w $0211
  8010.  dc.w bpl1pth
  8011. p1h
  8012.  dc.w 0
  8013.  
  8014.  dc.w bpl1ptl
  8015. p1l
  8016.  dc.w 0
  8017.  
  8018.  
  8019.  dc.w $108,40*7
  8020.  dc.w $10a,40*7
  8021.  
  8022.  dc.w $ffff,$fffe
  8023.  
  8024.  dc.w $180,$fff
  8025.  
  8026.  
  8027.  dc.w $f801,$ff00
  8028.  dc.w col1,$50
  8029.  dc.w $f901,$ff00
  8030.  dc.w col1,$90
  8031.  dc.w $fa01,$ff00
  8032.  dc.w col1,$f0
  8033.  dc.w $fb01,$ff00
  8034.  dc.w col1,$f0
  8035.  dc.w $fc01,$ff00
  8036.  dc.w col1,$90
  8037.  dc.w $fd01,$ff00
  8038.  dc.w col1,$50
  8039.  
  8040.  dc.w $fe01,$ff00
  8041.  dc.w col1,$fff
  8042.  
  8043.  dc.w $ffdf,$fffe
  8044.  dc.w $a01,$ff00
  8045.  dc.w bplcon0,$201
  8046.  
  8047.  incbin "faces2cols"
  8048.  dc.w bpl1pth
  8049. f1h
  8050.  dc.w 0
  8051.  
  8052.  dc.w bpl1ptl
  8053. f1l
  8054.  dc.w 0
  8055.  
  8056.  dc.w bpl2pth
  8057. f2h
  8058.  dc.w 0
  8059.  
  8060.  dc.w bpl2ptl
  8061. f2l
  8062.  dc.w 0
  8063.  
  8064.  dc.w bpl3pth
  8065. f3h
  8066.  dc.w 0
  8067.  
  8068.  dc.w bpl3ptl
  8069. f3l
  8070.  dc.w 0
  8071.  
  8072.  dc.w bpl4pth
  8073. f4h
  8074.  dc.w 0
  8075.  dc.w bpl4ptl
  8076. f4l
  8077.  dc.w 0
  8078.  
  8079.  dc.w bpl5pth
  8080. f5h
  8081.  dc.w 0
  8082.  dc.w bpl5ptl
  8083. f5l
  8084.  dc.w 0
  8085.  
  8086.  dc.w $0c01,$ff00
  8087.  dc.w bplcon0,$5201
  8088.   
  8089.  dc.w $ffff,$fffe
  8090.  
  8091.  cnop 0,64
  8092. FacePlace:
  8093. ; ds.l 6*32*5
  8094.  
  8095.  
  8096.  
  8097. ********************************************
  8098. * Stuff you don't have to worry about yet. *
  8099. ********************************************
  8100.  
  8101. closeeverything:
  8102.  
  8103.  
  8104.  jsr mt_end
  8105.  
  8106.  move.l #$dff000,a6
  8107.  move.l old,$dff080     ; Restore old copper list.
  8108.  move.l old,d0
  8109.  move.w d0,ocl
  8110.  swap d0
  8111.  move.w d0,och
  8112.  move.w #$8020,dmacon(a6)
  8113.  move.w #$f,dmacon(a6)
  8114.  move.l saveit,$6c.w
  8115.  move.l OLDKINT,$68.w
  8116.  move.w saveinters,d0
  8117.  or.w #$c000,d0
  8118.  move.w d0,intena(a6)
  8119.  clr.w $dff0a8
  8120.  clr.w $dff0b8
  8121.  clr.w $dff0c8
  8122.  clr.w $dff0d8
  8123.  
  8124. ; move.w #3,d0
  8125. ;nonewvbl
  8126. ; btst #5,intreqrl(a6)
  8127. ; beq.s nonewvbl
  8128. ; move.w #$20,intreq(a6)
  8129. ; dbra d0,nonewvbl
  8130.  
  8131. ; move.l oldview,a1
  8132. ; move.l a1,d0
  8133. ; move.l gfxbase,a6
  8134. ; jsr -$de(a6)
  8135.  
  8136. ; cmp.b #'s',mors
  8137. ; beq.s leaveold
  8138.  move.w #$f8e,$dff1dc
  8139. ;leaveold:
  8140.  
  8141.  jsr RELEASEWALLMEM
  8142.  jsr RELEASESAMPMEM
  8143.  jsr RELEASELEVELMEM
  8144.  jsr RELEASEFLOORMEM
  8145.  jsr RELEASESCRNMEM
  8146.  jsr RELEASEOBJMEM
  8147.  
  8148.  move.l #0,d0
  8149.  
  8150.  rte
  8151.  
  8152. intbase: dc.l 0
  8153. gfxbase: dc.l 0
  8154. oldview: dc.l 0
  8155.  
  8156. stuff:
  8157.  
  8158.     Lea    gfxname(pc),a1    
  8159.     Moveq.l    #0,d0
  8160.     Move.l    $4.w,a6    
  8161.     Jsr    -$228(a6)
  8162.     Move.l     d0,gfxbase
  8163.     Move.l    d0,a6                Use As Base Reg
  8164.     Move.l    34(a6),oldview
  8165.     move.l 38(a6),old
  8166.     rts
  8167.  
  8168. gfxname dc.b "graphics.library",0
  8169.  even
  8170. INTUNAME    dc.b    "intuition.library",0
  8171.  
  8172.  even
  8173.  
  8174.  
  8175.  cnop 0,64
  8176.  
  8177. Panel:
  8178.  incbin "PanelRaw"
  8179.  
  8180. TimerScr: 
  8181. ;ds.b 40*64
  8182.  
  8183. scrntab:
  8184.  ds.b 16
  8185. val SET 32
  8186.  REPT 96
  8187.  dc.b val,val,val
  8188. val SET val+1
  8189.  ENDR
  8190.  ds.b 16
  8191.  
  8192. smallscrntab:
  8193. val SET 32
  8194.  REPT 96
  8195.  dc.b val,val
  8196. val SET val+1
  8197.  ENDR
  8198.  
  8199.  cnop 0,64
  8200. scrn:
  8201.  
  8202.  dcb.l 8,$33333333
  8203.  dc.l 0
  8204.  dc.l 0
  8205.  
  8206.  dcb.l 8,$0f0f0f0f
  8207.  dc.l 0
  8208.  dc.l 0
  8209.  
  8210.  dcb.l 8,$00ff00ff
  8211.  dc.l 0
  8212.  dc.l 0
  8213.  
  8214.  dcb.l 8,$0000ffff
  8215.  dc.l 0
  8216.  dc.l 0
  8217.  
  8218.  dc.l 0,-1,0,-1,0,-1,0,-1
  8219.  dc.l 0
  8220.  dc.l 0
  8221.  
  8222.  dc.l -1,-1,0,0,-1,-1,0,0
  8223.  dc.l 0
  8224.  dc.l 0
  8225.  
  8226.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  8227.  dc.l 0
  8228.  dc.l 0
  8229.  
  8230. NumTimes: dc.l 0
  8231. TimeCount: dc.l 0
  8232. oldtime: dc.l 0
  8233. counting: dc.b 0
  8234. oktodisplay: dc.b 0
  8235.  
  8236. INITTIMER:
  8237.  move.l #0,TimeCount
  8238.  move.l #0,NumTimes
  8239.  rts
  8240.  
  8241. STARTCOUNT:
  8242.  move.l d0,-(a7)
  8243.  move.l $dff004,d0
  8244.  and.l #$1ffff,d0
  8245.  move.l d0,oldtime
  8246.  st counting
  8247.  move.l (a7)+,d0
  8248.  rts
  8249.  
  8250. STOPCOUNT:
  8251.  move.l d0,-(a7)
  8252.  move.l $dff004,d0
  8253.  and.l #$1ffff,d0
  8254.  
  8255.  sub.l oldtime,d0
  8256.  cmp.l #-256,d0
  8257.  bge.s okcount
  8258.  add.l #313*256,d0
  8259. okcount:
  8260.  add.l d0,TimeCount
  8261.  addq.l #1,NumTimes
  8262.  clr.b counting
  8263.  move.l (a7)+,d0
  8264.  rts
  8265.  
  8266. STOPCOUNTNOADD:
  8267.  move.l d0,-(a7)
  8268.  move.l $dff004,d0
  8269.  and.l #$1ffff,d0
  8270.  
  8271.  sub.l oldtime,d0
  8272.  cmp.l #-256,d0
  8273.  bge.s okcount2
  8274.  add.l #313*256,d0
  8275. okcount2:
  8276.  add.l d0,TimeCount
  8277.  clr.b counting
  8278.  move.l (a7)+,d0
  8279.  rts
  8280.  
  8281. maxbot: dc.w 0
  8282. tstneg: dc.l 0
  8283.  
  8284. STOPTIMER:
  8285.  st oktodisplay
  8286.  rts
  8287.  
  8288. digits: incbin "numbers.inc"
  8289.  
  8290.  
  8291.  Section Sounds,CODE_C
  8292.  
  8293. Scream:
  8294. ; incbin "ab3:sounds/Scream"
  8295. ; ds.w 100
  8296. EndScream:
  8297. LowScream:
  8298. ; incbin "ab3:sounds/LowScream"
  8299. ; ds.w 100
  8300. EndLowScream:
  8301. BaddieGun:
  8302. ; incbin "ab3:sounds/BaddieGun"
  8303. EndBaddieGun:
  8304. bass:
  8305. ; incbin "ab3:sounds/backbass+drum"
  8306. bassend:
  8307. Shoot:
  8308. ; incbin "ab3:sounds/fire!"
  8309. EndShoot:
  8310. Munch:
  8311. ; incbin "ab3:sounds/munch"
  8312. EndMunch:
  8313. PooGun:
  8314. ; incbin "ab3:sounds/shoot.dm"
  8315. EndPooGun:
  8316. Collect:
  8317. ; incbin "ab3:sounds/collect"
  8318. EndCollect:
  8319. DoorNoise:
  8320. ; incbin "ab3:sounds/newdoor"
  8321. EndDoorNoise:
  8322. Stomp:
  8323. ; incbin "ab3:sounds/footstep3"
  8324. EndStomp:
  8325. SwitchNoise:
  8326. ; incbin "ab3:sounds/switch"
  8327. EndSwitch:
  8328. Reload:
  8329. ; incbin "ab3:sounds/switch1.SFX"
  8330. EndReload:
  8331. NoAmmo:
  8332. ; incbin "ab3:sounds/noammo"
  8333. EndNoAmmo:
  8334. Splotch:
  8335. ; incbin "ab3:sounds/splotch"
  8336. EndSplotch:
  8337. SplatPop:
  8338. ; incbin "ab3:sounds/splatpop"
  8339. EndSplatPop:
  8340. Boom:
  8341. ; incbin "ab3:sounds/boom"
  8342. EndBoom:
  8343. Hiss:
  8344. ; incbin "ab3:sounds/newhiss"
  8345. EndHiss:
  8346. Howl1:
  8347. ; incbin "ab3:sounds/howl1"
  8348. EndHowl1:
  8349. Howl2:
  8350. ; incbin "ab3:sounds/howl2"
  8351. EndHowl2:
  8352. Pant:
  8353. ; incbin "ab3:sounds/pant"
  8354. EndPant:
  8355. Whoosh:
  8356. ; incbin "ab3:sounds/whoosh"
  8357. EndWhoosh:
  8358. ROAR:
  8359. ; incbin "ab3:sounds/bigscream"
  8360. EndROAR
  8361. whoosh:
  8362. ; incbin "ab3:sounds/flame"
  8363. Endwhoosh:
  8364.  SECTION music,code_c
  8365.  
  8366. UseAllChannels: dc.w 0
  8367.  
  8368. mt_init:move.l    mt_data,a0
  8369.     move.l    a0,a1
  8370.     add.l    #$3b8,a1
  8371.     moveq    #$7f,d0
  8372.     moveq    #0,d1
  8373. mt_loop:move.l    d1,d2
  8374.     subq.w    #1,d0
  8375. mt_lop2:move.b    (a1)+,d1
  8376.     cmp.b    d2,d1
  8377.     bgt.s    mt_loop
  8378.     dbf    d0,mt_lop2
  8379.     addq.b    #1,d2
  8380.  
  8381.     lea    mt_samplestarts(pc),a1
  8382.     asl.l    #8,d2
  8383.     asl.l    #2,d2
  8384.     add.l    #$43c,d2
  8385.     add.l    a0,d2
  8386.     move.l    d2,a2
  8387.     moveq    #$1e,d0
  8388. mt_lop3:clr.l    (a2)
  8389.     move.l    a2,(a1)+
  8390.     moveq    #0,d1
  8391.     move.w    42(a0),d1
  8392.     asl.l    #1,d1
  8393.     add.l    d1,a2
  8394.     add.l    #$1e,a0
  8395.     dbf    d0,mt_lop3
  8396.  
  8397.     or.b    #$2,$bfe001
  8398.     move.b    #$6,mt_speed
  8399.     clr.w    $dff0a8
  8400.     clr.w    $dff0b8
  8401.     clr.w    $dff0c8
  8402.     clr.w    $dff0d8
  8403.     clr.b    mt_songpos
  8404.     clr.b    mt_counter
  8405.     clr.w    mt_pattpos
  8406.     rts
  8407.  
  8408. mt_end:    clr.w    $dff0a8
  8409.     clr.w    $dff0b8
  8410.     clr.w    $dff0c8
  8411.     clr.w    $dff0d8
  8412.     move.w    #$f,$dff096
  8413.     rts
  8414.  
  8415. mt_music:
  8416.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  8417.     move.l    mt_data,a0
  8418.     addq.b    #$1,mt_counter
  8419.     move.b    mt_counter,D0
  8420.     cmp.b    mt_speed,D0
  8421.     blt.s    mt_nonew
  8422.     clr.b    mt_counter
  8423.     bra    mt_getnew
  8424.  
  8425. mt_nonew:
  8426.     lea    mt_voice1(pc),a6
  8427.     lea    $dff0a0,a5
  8428.     bsr    mt_checkcom
  8429.     lea    mt_voice2(pc),a6
  8430.     lea    $dff0b0,a5
  8431.     bsr    mt_checkcom
  8432.     tst.b UseAllChannels
  8433.     beq mt_endr
  8434.      lea    mt_voice3(pc),a6
  8435.     lea    $dff0c0,a5
  8436.     bsr    mt_checkcom
  8437.     lea    mt_voice4(pc),a6
  8438.     lea    $dff0d0,a5
  8439.     bsr    mt_checkcom
  8440.     bra    mt_endr
  8441.  
  8442. mt_arpeggio:
  8443.     moveq    #0,d0
  8444.     move.b    mt_counter,d0
  8445.     divs    #$3,d0
  8446.     swap    d0
  8447.     cmp.w    #$0,d0
  8448.     beq.s    mt_arp2
  8449.     cmp.w    #$2,d0
  8450.     beq.s    mt_arp1
  8451.  
  8452.     moveq    #0,d0
  8453.     move.b    $3(a6),d0
  8454.     lsr.b    #4,d0
  8455.     bra.s    mt_arp3
  8456. mt_arp1:moveq    #0,d0
  8457.     move.b    $3(a6),d0
  8458.     and.b    #$f,d0
  8459.     bra.s    mt_arp3
  8460. mt_arp2:move.w    $10(a6),d2
  8461.     bra.s    mt_arp4
  8462. mt_arp3:asl.w    #1,d0
  8463.     moveq    #0,d1
  8464.     move.w    $10(a6),d1
  8465.     lea    mt_periods(pc),a0
  8466.     moveq    #$24,d7
  8467. mt_arploop:
  8468.     move.w    (a0,d0.w),d2
  8469.     cmp.w    (a0),d1
  8470.     bge.s    mt_arp4
  8471.     addq.l    #2,a0
  8472.     dbf    d7,mt_arploop
  8473.     rts
  8474. mt_arp4:move.w    d2,$6(a5)
  8475.     rts
  8476.  
  8477. mt_getnew:
  8478.     move.l    mt_data,a0
  8479.     move.l    a0,a3
  8480.     move.l    a0,a2
  8481.     add.l    #$c,a3
  8482.     add.l    #$3b8,a2
  8483.     add.l    #$43c,a0
  8484.  
  8485.     moveq    #0,d0
  8486.     move.l    d0,d1
  8487.     move.b    mt_songpos,d0
  8488.     move.b    (a2,d0.w),d1
  8489.     asl.l    #8,d1
  8490.     asl.l    #2,d1
  8491.     add.w    mt_pattpos,d1
  8492.     clr.w    mt_dmacon
  8493.  
  8494.     lea    $dff0a0,a5
  8495.     lea    mt_voice1(pc),a6
  8496.     bsr.s    mt_playvoice
  8497.     lea    $dff0b0,a5
  8498.     lea    mt_voice2(pc),a6
  8499.     bsr.s    mt_playvoice
  8500.     tst.b UseAllChannels
  8501.     beq mt_setdma
  8502.     lea    $dff0c0,a5
  8503.     lea    mt_voice3(pc),a6
  8504.     bsr.s    mt_playvoice
  8505.     lea    $dff0d0,a5
  8506.     lea    mt_voice4(pc),a6
  8507.     bsr.s    mt_playvoice
  8508.     bra    mt_setdma
  8509.  
  8510. mt_playvoice:
  8511.     move.l    (a0,d1.l),(a6)
  8512.     addq.l    #4,d1
  8513.     moveq    #0,d2
  8514.     move.b    $2(a6),d2
  8515.     and.b    #$f0,d2
  8516.     lsr.b    #4,d2
  8517.     move.b    (a6),d0
  8518.     and.b    #$f0,d0
  8519.     or.b    d0,d2
  8520.     tst.b    d2
  8521.     beq.s    mt_setregs
  8522.     moveq    #0,d3
  8523.     lea    mt_samplestarts(pc),a1
  8524.     move.l    d2,d4
  8525.     subq.l    #$1,d2
  8526.     asl.l    #2,d2
  8527.     mulu    #$1e,d4
  8528.     move.l    (a1,d2.l),$4(a6)
  8529.     move.w    (a3,d4.l),$8(a6)
  8530.     move.w    $2(a3,d4.l),$12(a6)
  8531.     move.w    $4(a3,d4.l),d3
  8532.     tst.w    d3
  8533.     beq.s    mt_noloop
  8534.     move.l    $4(a6),d2
  8535.     asl.w    #1,d3
  8536.     add.l    d3,d2
  8537.     move.l    d2,$a(a6)
  8538.     move.w    $4(a3,d4.l),d0
  8539.     add.w    $6(a3,d4.l),d0
  8540.     move.w    d0,8(a6)
  8541.     move.w    $6(a3,d4.l),$e(a6)
  8542.     move.w    $12(a6),d0
  8543.     asr.w #2,d0
  8544.     move.w d0,$8(a5)
  8545.     bra.s    mt_setregs
  8546. mt_noloop:
  8547.     move.l    $4(a6),d2
  8548.     add.l    d3,d2
  8549.     move.l    d2,$a(a6)
  8550.     move.w    $6(a3,d4.l),$e(a6)
  8551.     move.w    $12(a6),d0
  8552.     asr.w #2,d0
  8553.     move.w d0,$8(a5)
  8554. mt_setregs:
  8555.     move.w    (a6),d0
  8556.     and.w    #$fff,d0
  8557.     beq    mt_checkcom2
  8558.     move.b    $2(a6),d0
  8559.     and.b    #$F,d0
  8560.     cmp.b    #$3,d0
  8561.     bne.s    mt_setperiod
  8562.     bsr    mt_setmyport
  8563.     bra    mt_checkcom2
  8564. mt_setperiod:
  8565.     move.w    (a6),$10(a6)
  8566.     and.w    #$fff,$10(a6)
  8567.     move.w    $14(a6),d0
  8568.     move.w    d0,$dff096
  8569.     clr.b    $1b(a6)
  8570.  
  8571.     move.l    $4(a6),(a5)
  8572.     move.w    $8(a6),$4(a5)
  8573.     move.w    $10(a6),d0
  8574.     and.w    #$fff,d0
  8575.     move.w    d0,$6(a5)
  8576.     move.w    $14(a6),d0
  8577.     or.w    d0,mt_dmacon
  8578.     bra    mt_checkcom2
  8579.  
  8580. mt_setdma:
  8581.      move.w #250,d0
  8582. mt_wait:
  8583.      add.w #1,testchip
  8584.      dbra d0,mt_wait
  8585.     move.w    mt_dmacon,d0
  8586.     or.w    #$8000,d0
  8587.     and.w #%1111111111110011,d0
  8588.     move.w    d0,$dff096
  8589.     move.w #250,d0
  8590. mt_wait2:
  8591.     add.w #1,testchip
  8592.     dbra    d0,mt_wait2
  8593.     lea    $dff000,a5
  8594.     tst.b UseAllChannels
  8595.     beq.s noall
  8596.     lea    mt_voice4(pc),a6
  8597.     move.l    $a(a6),$d0(a5)
  8598.     move.w    $e(a6),$d4(a5)
  8599.     lea    mt_voice3(pc),a6
  8600.     move.l    $a(a6),$c0(a5)
  8601.     move.w    $e(a6),$c4(a5)
  8602. noall:
  8603.     lea    mt_voice2(pc),a6
  8604.     move.l    $a(a6),$b0(a5)
  8605.     move.w    $e(a6),$b4(a5)
  8606.     lea    mt_voice1(pc),a6
  8607.     move.l    $a(a6),$a0(a5)
  8608.     move.w    $e(a6),$a4(a5)
  8609.  
  8610.     add.w    #$10,mt_pattpos
  8611.     cmp.w    #$400,mt_pattpos
  8612.     bne.s    mt_endr
  8613. mt_nex:    clr.w    mt_pattpos
  8614.     clr.b    mt_break
  8615.     addq.b    #1,mt_songpos
  8616.     and.b    #$7f,mt_songpos
  8617.     move.b    mt_songpos,d1
  8618. ;    cmp.b    mt_data+$3b6,d1
  8619. ;    bne.s    mt_endr
  8620. ;    move.b    mt_data+$3b7,mt_songpos
  8621. mt_endr:tst.b    mt_break
  8622.     bne.s    mt_nex
  8623.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  8624.     rts
  8625.  
  8626. mt_setmyport:
  8627.     move.w    (a6),d2
  8628.     and.w    #$fff,d2
  8629.     move.w    d2,$18(a6)
  8630.     move.w    $10(a6),d0
  8631.     clr.b    $16(a6)
  8632.     cmp.w    d0,d2
  8633.     beq.s    mt_clrport
  8634.     bge.s    mt_rt
  8635.     move.b    #$1,$16(a6)
  8636.     rts
  8637. mt_clrport:
  8638.     clr.w    $18(a6)
  8639. mt_rt:    rts
  8640.  
  8641. CODESTORE: dc.l 0
  8642.  
  8643. mt_myport:
  8644.     move.b    $3(a6),d0
  8645.     beq.s    mt_myslide
  8646.     move.b    d0,$17(a6)
  8647.     clr.b    $3(a6)
  8648. mt_myslide:
  8649.     tst.w    $18(a6)
  8650.     beq.s    mt_rt
  8651.     moveq    #0,d0
  8652.     move.b    $17(a6),d0
  8653.     tst.b    $16(a6)
  8654.     bne.s    mt_mysub
  8655.     add.w    d0,$10(a6)
  8656.     move.w    $18(a6),d0
  8657.     cmp.w    $10(a6),d0
  8658.     bgt.s    mt_myok
  8659.     move.w    $18(a6),$10(a6)
  8660.     clr.w    $18(a6)
  8661. mt_myok:move.w    $10(a6),$6(a5)
  8662.     rts
  8663. mt_mysub:
  8664.     sub.w    d0,$10(a6)
  8665.     move.w    $18(a6),d0
  8666.     cmp.w    $10(a6),d0
  8667.     blt.s    mt_myok
  8668.     move.w    $18(a6),$10(a6)
  8669.     clr.w    $18(a6)
  8670.     move.w    $10(a6),$6(a5)
  8671.     rts
  8672.  
  8673. mt_vib:    move.b    $3(a6),d0
  8674.     beq.s    mt_vi
  8675.     move.b    d0,$1a(a6)
  8676.  
  8677. mt_vi:    move.b    $1b(a6),d0
  8678.     lea    mt_sin(pc),a4
  8679.     lsr.w    #$2,d0
  8680.     and.w    #$1f,d0
  8681.     moveq    #0,d2
  8682.     move.b    (a4,d0.w),d2
  8683.     move.b    $1a(a6),d0
  8684.     and.w    #$f,d0
  8685.     mulu    d0,d2
  8686.     lsr.w    #$6,d2
  8687.     move.w    $10(a6),d0
  8688.     tst.b    $1b(a6)
  8689.     bmi.s    mt_vibmin
  8690.     add.w    d2,d0
  8691.     bra.s    mt_vib2
  8692. mt_vibmin:
  8693.     sub.w    d2,d0
  8694. mt_vib2:move.w    d0,$6(a5)
  8695.     move.b    $1a(a6),d0
  8696.     lsr.w    #$2,d0
  8697.     and.w    #$3c,d0
  8698.     add.b    d0,$1b(a6)
  8699.     rts
  8700.  
  8701. mt_nop:    move.w    $10(a6),$6(a5)
  8702.     rts
  8703.  
  8704.  
  8705. mt_checkcom:
  8706.     move.w    $2(a6),d0
  8707.     and.w    #$fff,d0
  8708.     beq.s    mt_nop
  8709.     move.b    $2(a6),d0
  8710.     and.b    #$f,d0
  8711.     tst.b    d0
  8712.     beq    mt_arpeggio
  8713.     cmp.b    #$1,d0
  8714.     beq.s    mt_portup
  8715.     cmp.b    #$2,d0
  8716.     beq    mt_portdown
  8717.     cmp.b    #$3,d0
  8718.     beq    mt_myport
  8719.     cmp.b    #$4,d0
  8720.     beq    mt_vib
  8721.     move.w    $10(a6),$6(a5)
  8722.     cmp.b    #$a,d0
  8723.     beq.s    mt_volslide
  8724.     rts
  8725.  
  8726. mt_volslide:
  8727.     moveq    #0,d0
  8728.     move.b    $3(a6),d0
  8729.     lsr.b    #4,d0
  8730.     tst.b    d0
  8731.     beq.s    mt_voldown
  8732.     add.w    d0,$12(a6)
  8733.     cmp.w    #$40,$12(a6)
  8734.     bmi.s    mt_vol2
  8735.     move.w    #$40,$12(a6)
  8736. mt_vol2:move.w    $12(a6),d0
  8737.     asr.w #2,d0
  8738.     move.w d0,$8(a5)
  8739.     rts
  8740.  
  8741. mt_voldown:
  8742.     moveq    #0,d0
  8743.     move.b    $3(a6),d0
  8744.     and.b    #$f,d0
  8745.     sub.w    d0,$12(a6)
  8746.     bpl.s    mt_vol3
  8747.     clr.w    $12(a6)
  8748. mt_vol3:move.w    $12(a6),d0
  8749.     asr.w #2,d0
  8750.     move.w d0,$8(a5)
  8751.     rts
  8752.  
  8753. mt_portup:
  8754.     moveq    #0,d0
  8755.     move.b    $3(a6),d0
  8756.     sub.w    d0,$10(a6)
  8757.     move.w    $10(a6),d0
  8758.     and.w    #$fff,d0
  8759.     cmp.w    #$71,d0
  8760.     bpl.s    mt_por2
  8761.     and.w    #$f000,$10(a6)
  8762.     or.w    #$71,$10(a6)
  8763. mt_por2:move.w    $10(a6),d0
  8764.     and.w    #$fff,d0
  8765.     move.w    d0,$6(a5)
  8766.     rts
  8767.  
  8768. mt_portdown:
  8769.     clr.w    d0
  8770.     move.b    $3(a6),d0
  8771.     add.w    d0,$10(a6)
  8772.     move.w    $10(a6),d0
  8773.     and.w    #$fff,d0
  8774.     cmp.w    #$358,d0
  8775.     bmi.s    mt_por3
  8776.     and.w    #$f000,$10(a6)
  8777.     or.w    #$358,$10(a6)
  8778. mt_por3:move.w    $10(a6),d0
  8779.     and.w    #$fff,d0
  8780.     move.w    d0,$6(a5)
  8781.     rts
  8782.  
  8783. mt_checkcom2:
  8784.     move.b    $2(a6),d0
  8785.     and.b    #$f,d0
  8786.     cmp.b    #$e,d0
  8787.     beq.s    mt_setfilt
  8788.     cmp.b    #$d,d0
  8789.     beq.s    mt_pattbreak
  8790.     cmp.b    #$b,d0
  8791.     beq.s    mt_posjmp
  8792.     cmp.b    #$c,d0
  8793.     beq.s    mt_setvol
  8794.     cmp.b    #$f,d0
  8795.     beq.s    mt_setspeed
  8796.     rts
  8797.  
  8798. mt_setfilt:
  8799.     move.b    $3(a6),d0
  8800.     and.b    #$1,d0
  8801.     asl.b    #$1,d0
  8802.     and.b    #$fd,$bfe001
  8803.     or.b    d0,$bfe001
  8804.     rts
  8805. mt_pattbreak:
  8806.     not.b    mt_break
  8807.     rts
  8808. mt_posjmp:
  8809.     st reachedend
  8810.     move.b    $3(a6),d0
  8811.     subq.b    #$1,d0
  8812.     move.b    d0,mt_songpos
  8813.     not.b    mt_break
  8814.     rts
  8815. mt_setvol:
  8816.     cmp.b    #$40,$3(a6)
  8817.     ble.s    mt_vol4
  8818.     move.b    #$40,$3(a6)
  8819. mt_vol4:move.b    $3(a6),d0
  8820.     asr.w #2,d0
  8821.     move.w d0,$8(a5)
  8822.     rts
  8823. mt_setspeed:
  8824.     cmp.b    #$1f,$3(a6)
  8825.     ble.s    mt_sets
  8826.     move.b    #$1f,$3(a6)
  8827. mt_sets:move.b    $3(a6),d0
  8828.     beq.s    mt_rts2
  8829.     move.b    d0,mt_speed
  8830.     clr.b    mt_counter
  8831. mt_rts2:rts
  8832.  
  8833. mt_sin:
  8834.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  8835.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  8836.  
  8837. mt_periods:
  8838.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  8839.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  8840.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  8841.  DC.w $007f,$0078,$0071,$0000,$0000
  8842.  
  8843. reachedend: dc.b 0
  8844. mt_speed:    DC.b    6
  8845. mt_songpos:    DC.b    0
  8846. mt_pattpos:    DC.w    0
  8847. mt_counter:    DC.b    0
  8848.  
  8849. mt_break:    DC.b    0
  8850. mt_dmacon:    DC.w    0
  8851. mt_samplestarts:DS.L    $1f
  8852. mt_voice1:    DS.w    10
  8853.         DC.w    1
  8854.         DS.w    3
  8855. mt_voice2:    DS.w    10
  8856.         DC.w    2
  8857.         DS.w    3
  8858. mt_voice3:    DS.w    10
  8859.         DC.w    4
  8860.         DS.w    3
  8861. mt_voice4:    DS.w    10
  8862.         DC.w    8
  8863.         DS.w    3
  8864.  
  8865. testchip: dc.w 0
  8866.  
  8867. ;/* End of File */
  8868. mt_data: dc.l 0
  8869. tstchip: dc.l 0
  8870.  include "SERIAL_NIGHTMARE"
  8871.  
  8872.  
  8873. ingame:
  8874. ; incbin "ab3:includes/ingame"
  8875. gameover: incbin "ab3:includes/gameover"
  8876. welldone: incbin "ab3:includes/welldone"
  8877.